Visual Basic 9.0 中的对象初始化表达式和匿名类型






4.08/5 (3投票s)
Visual Basic 9.0 语言语法中一些新的酷炫功能的介绍。
引言
Visual Basic 9.0 引入了一些新的语言特性,例如对象初始化器和匿名类型。如果您计划学习 LINQ,这是 .NET Framework 3.5 中的主要新特性,那么理解这些特性非常重要。
在本文中,我将介绍 Visual Basic 2008 中的对象初始化器和匿名类型,并提供一些代码片段以使概念更清晰。
您可以自由使用 Visual Basic 2008 Express Edition 或更高版本,因为编译器始终相同。
对象初始化表达式
对象初始化表达式是关于实例化构造函数不接收任何参数的对象,即使对象本身公开了一个或多个可以初始化的属性。 为了完成这个,在 Visual Basic 9.0 中,我们可以使用 With
关键字。 考虑以下非常简单的 Person
类,它公开了两个属性 Name
和 Surname
Class Person Private _name As String Private _surName As String Public Property Name() As String Get Return _name End Get Set(ByVal value As String) _name = value End Set End Property Public Property SurName() As String Get Return _surName End Get Set(ByVal value As String) _surName = value End Set End Property End Class
正如您所看到的,没有指定显式构造函数。 这意味着该类实现了一个不接收任何参数的构造函数。 要使用 Visual Basic 8.0 实例化此类,我们必须编写以下代码
Dim p As New Person
With p
.Name = "Alessandro"
.SurName = "Del Sole"
End With
现在,在 Visual Basic 9.0 中,我们可以使用以下语法
'Object Initialization Expression
Dim p As New Person With {.Name = "Alessandro", .SurName = "Del Sole"}
这对于编写更少的代码行并保持代码更清晰非常有用。 许多 WPF 对象都具有不接收任何参数的构造函数,因此这是在基类库中实例化对象的另一个好机会。
匿名类型
.NET Framework 3.5 的另一个有趣的新特性是所谓的匿名类型。 实质上,当您实例化一个对象时,您不需要指定它的类型,但您可以填充您自己感兴趣的元素。 这不应与本地类型推断混淆,本地类型推断是 .NET 3.5 的另一个特性,编译器会自动检测对象所属的类型。 匿名类型在 LINQ 查询表达式中非常重要。 现在,让我们看几个代码片段。 考虑以下代码片段
'Anonymous type
Dim firstAnonymous = New With {.Name = "Alessandro", .Age = 30}
这实例化了一个 firstAnonymous
对象,它是一个匿名类型。 正如您所看到的,在 New
关键字之后,没有指定类型,但是该对象已初始化并填充了两个成员,它们分别是 String
和 Integer
(这里,我们再次使用了对象初始化表达式技术)。 这些成员被认为是正常的属性,并且每个匿名类型必须至少包含一个属性。 此外,匿名类型可以包含只读属性。 为了完成这个,您必须使用 Key
关键字标记每个属性,正如您可以在以下代码片段中看到的那样
'Anonymous type with two readonly properties
Dim secondAnonymous = New With {Key .Name = "Alessandro", Key .Age = 30}
重要的是要考虑到匿名类型仅在定义它们的成员中可见。 这不应该是一个大问题,因为正如我们之前所说,匿名类型的主要用途是在 LINQ 查询表达式中,而不是在类或模块级别。
关注点
我们刚刚看到的这两个是 VB 9.0 中两个非常重要的语言特性。 如果您计划认真使用 LINQ 进行数据查询,您应该深入了解一下。