VB.Net与C# 的语法比较

最近看代码或写代码时,经常把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.NETC#與 CLS 相容
ObjectobjectY
StringstringY
 sbyteN
ShortshortY
IntegerintY
LonglongY
BytebyteY
 ushortN
 uintN
 ulongN
SinglefloatY
DoubledoubleY
BooleanboolY
CharcharY
DecimaldecimalY