為什麼增強?
由於 .Net Framework 3.5 中許多修改與擴展觸及 .Net Framework 2.0 中的已有類(如 LINQ),但又要保證向下兼容,所以微軟的設計團隊對現有 Visual Basic 語法作出了一些增強。與語法糖一樣,它們也是編譯時由編譯器負責完成的。
增強了什麼?
·擴展方法
·松弛委托
·怎麼使用它?
實際上,這一組功能主要面對的是類庫設計人員。
1. 擴展方法
擴展方法用於對已有 CLR 類庫或是其他類庫中的方法進行擴展,事實上也是“語法糖”的一種,只不過更大些,更重要些。在 .Net Framework 3.5 中,為了對已有 CLR 中的類型進行拓展,使其可以使用 LINQ 的查詢方式,多處使用了這種擴展。實質上,擴展方法是編譯時將調用的函數指向具體的擴展方法,從而達到“擴展”的目的。
擴展方法必須為 Shared(C# 中的 Static),且必須位於 Module(C# 中的 Static Class)中。
示例代碼
Imports System.Runtime.CompilerServices
Public Module SampleModule Sample
<Extension()> _
Public Function MySum()Function MySum(ByVal [Me] As IEnumerable(Of Integer)) As Integer
Dim I As Integer
For Each Obj As Integer In [Me]
I += Obj
Next
Return I
End Function
End Module
擴展方法僅作用於該 Namespace 中(否則不都亂套了),或用 Imports 引入。執行 LINQ 需要 Imports System.LINQ 命名空間也是一樣的道理。
2. 松弛委托
Visual Basic 9 之前的版本中,綁定到委托標識符的方法必須完全匹配委托類型的簽名。這帶來了許多不必要的麻煩,比如在為 Thread 綁定方法時弱類型帶來的痛苦。
而在 Visual Basic 9 中,委托的綁定和定義將允許寬松的類型匹配,只要方法中參數類型能夠隱式轉換到目標簽名。這裡使用一個典型的范例,創建一個 New Thread。按裝配腦袋的說法,松弛委托可以更松些,把 SampleSub 中的參數一並去掉,依舊可以編譯完成...
示例代碼
'在 Visual Basic 8 中,你不可能將這個 Sub 綁定到 ThreadStart 上,但在 VB9 中,一切都成為可能
Public Sub SampleSub()Sub SampleSub(Args As String)
End Sub
'一切都是那麼的簡單!
Dim Thread As New Thread(AddressOf SampleSub)
Thread.Start()