首页 / 软件开发 / VB.NET / Visual Basic 9不完全入门之语法增强
Visual Basic 9不完全入门之语法增强2008-04-23John Chen为什么增强?由于 .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()