註:C#3.0, VB9.0
這裡只是一些比較容易弄不清的地方,其它關鍵字的差異(比如abstract 和 MustInherit之類的)相信都是很簡單的了.
- 模組(Module): 模組就是C#裡的靜態類,但是,在同一命名空間裡的其它類型裡,調用模組裡定義的方法不需要加模組類的名稱.比如 AAA.BB.XXModule有個M()方法,則在AA.BB.XXXXClass裡可以直接寫: M(),而不用寫XXModule.M()
- 數組聲明: Dim a = new Int() {1, 2, 3} ,或者: Dim a(3) As Integer
- 方法:分為兩種,有傳回值的叫Function,無傳回值的叫Sub
- 聲明Function或Property時可以不指定類型(As Type), 預設為Object類型
- 類型轉換: C#: var a = (TypeName)b; VB: Dim a = DirectCast(b, TypeName) C#: var a = b as TypeName; VB: Dim a = TryCast(b, TypeName)
- 類型:C#: typeof(TypeName) VB: GetType(TypeName) C#: a is TypeName VB: TypeOf a is TypeName
- 操作符:/返回的是帶餘數的結果(CInt(46/10) = 5),\返回不帶餘數的結果, Mod返回餘數; VB有 +=, *=等運算子,沒有 ++, --等運行符
- 對象初始設定式: Dim a = new XX with {.Property1 = value1, .Property2 = value2}
- 源碼組織:VB裡一個語句要放在一行;可以用" _"放在行尾把兩行視為邏輯上的一行;語句結尾不要加分號;
- 不使用方括弧:VB裡數組存取,含參屬性等都用圓括弧(),不用方括弧[], 應用屬性Attribute時用角括弧<>
- 泛型:C#: List<string> VB: List(Of String)
- 字串串連:VB裡用 & 來連接字串( 1 & "2" = "12", 1 + "2" = 3)
- 字串:沒有C#裡的@""的對應物;字元轉義只支援""轉意成"; 分行符號等無法直接輸入
- Lambda運算式: C#版: x => x.Property; VB版: Function(x) x.Property
- 等同性: C#: x == b VB: x = b(如果有重載=操作符的話,Object類重載的不算) C#: ReferenceEqual(a, b) VB: a is b