VB 和 C# 的自动实现属性

阅读数:1061 2009 年 6 月 15 日

话题:.NETC#语言 & 开发架构

C# 在 3.0 版本中添加了自动实现属性,但是当时 Visual Basic 还没有与之匹配的特性。即将发布的.NET 4.0 版本中,VB 在该领域迎头赶上,但却有所不同。C# 中,自动实现属性可以这样编写,如下所示:

public string FirstName {get; set;}

Visual Basic 则需要关键字 Property,这表示它不需要 get/set 来对字段进行区分。但是,VB 中的自动实现属性对字段只有一个标记。

Public Property FirstName As String

对于 VB 和 C#,该属性都自动支持一个私有字段。在 C# 中,这个成员有一个自动生成的名称,例如:“<FirstName>k__BackingField”。不用说,这个字段不能用一般的 C# 语法进行访问。Visual Basic 则缺乏这种创新性,它只不过在该属性名前添加了一个下划线。所以,如果属性名为“FirstName”,那么对应的私有字段名为“_FirstName”。

直接访问该支持字段让很多事情变得都有可能。逻辑上来说,开发人员可以把该属性标志为 ReadOnly 并在构造函数中设置它的值。然而,那并不可选。

尽管它有一定的局限,但实际上 C# 的灵活性更好。你可以标志 set 为 private 或 protected,和访问支持字段一样有效。如下所示:

public string FirstName {get; private set;}

两种语言的局限在于它们仍没有任何针对不可变对象的工具。如果想让对象的属性和字段都为只读并可在构造函数中进行设置,那么我们仍然需要像在.NET 1.0 那样编写代码。

查看英文原文:Auto-implemented Properties in VB and C#