標籤:
最近看代碼或寫代碼時,經常把VB與C#的基本文法搞混,為方便查看,特對其異同進行對比:
變數初始化
VB.NET 自動將所有的變數初始化成 0 或 nothing。C# 在你未初始化變數之前不準你用該變數。
選擇性參數(Optional parameters)
C# 不提供函數選擇性參數,但仍可以利用重載的方法,提供選擇性參數
靜態方法的定義
C# 和 VB.NET 都在 Class 支援靜態方法、屬性和 fields,C#中為Static,VB.NET 稱為 Shared,例如
publicstaticvoid StaticMethod()
{
Console.WriteLine("不需要建立物件就可以呼叫");
}
PublicSharedSub ShareMethod()
Console.WriteLine("可以不建立物件來呼叫函數")
EndSub
Switch 和 Select Case 語法
在 C# 的 switch 語法讓你以某個值或語法跳到一個程式區塊。每一個區塊與一個常數值連結在一起。你可以使用多個常數值與 case 語法建立如下的程式碼
switch(i)
{
case 4:
case 5:
break;
case 6:
case 7:
break;
default:
break;
}
VB 則讓你可以組合常數或更複雜的語法,如下
SelectCase i
Case 4, 5
Case 6 To 9
CaseElse
EndSelect
不只如此,VB.NET 也讓你可以在 Select Case 語法中如同使用常數一般使用變數
傳值或傳址呼叫
所有的 VB.NET 參數都要明確地利用 ByVal 和 ByRef 宣告,C# 的參數都是傳值,除非以 ref 關鍵字宣告。
Virtual/Overridable 方法
C# 使用 Virtual 關鍵來宣告就算是參照到基礎 Class,但仍是呼叫到正確衍生類別的方法。以 override 宣告衍生的函數
VB.NET 使用 Overridable 關鍵字來宣告 virtual 函數,並需要使用 Overrides 關鍵字來宣告衍生的函數。
Abstract/MustInherit 方法
C# 用關鍵字 abstract 來標示需要由衍生 Class 來實現的方法,
VB.NET 使用 MustInherit 關鍵字來做同樣的標示(同時使用在 Class 和方法)。
Sealed/NoInheritable Classes
C# 用關鍵字 Sealed 來標示不可以被繼承的 Classs,VB.NET 以 NotInheritable 關鍵字來做相同的事。
VB.NET 支援所有的 CLS 標準資料型態,C# 增加支援無正負號的資料型態。
下表列出兩個語言的基礎型態以及是否與 CLS 相容
| VB.NET |
C# |
與 CLS 相容 |
| Object |
object |
Y |
| String |
string |
Y |
| |
sbyte |
N |
| Short |
short |
Y |
| Integer |
int |
Y |
| Long |
long |
Y |
| Byte |
byte |
Y |
| |
ushort |
N |
| |
uint |
N |
| |
ulong |
N |
| Single |
float |
Y |
| Double |
double |
Y |
| Boolean |
bool |
Y |
| Char |
char |
Y |
| Decimal |
decimal |
Y |
VB.Net與C# 的文法比較