为什么C#自动属性不支持VB 2010等默认值?

时间:2010-04-13 08:22:05

标签: c# vb.net .net-4.0 automatic-properties

看看新的VB 2010功能,我偶然发现了对Auto-Implemented Properties的支持。

由于我正在使用C#,这看起来很熟悉,但我注意到VB确实添加了我希望在C#中拥有的功能:为自动实现的属性设置任意默认值:

Public Class Person

    Property Name As String = "Scott Guthrie"
    Property Age as Integer = 35

End Class

我真的很喜欢在C#中使用自动属性。这样可以节省我们每次只需要一个默认值时引入支持字段并将其挂接到属性的工作量,从而不必要地使代码混乱。

我想知道为什么这也不是在C#中引入的?不这样做的理由是什么?是否正在进行语法讨论,或者是否存在技术限制?

4 个答案:

答案 0 :(得分:10)

为什么不在构造函数中默认它们?这也是它的原因。

答案 1 :(得分:4)

怎么样:

public class Person
{
    public Person() 
    {
         this.Name = "Scott Guthrie";
         this.Age = 35;
    }
    public string Name { get; set; }
    public string Age { get; set; }
}

在实践中,我认为,归结为相同而且没有那么多额外的工作。但也许,在很长一段时间内,VB看起来比C#......; - )

更清晰

编辑(理由):
您在原始问题下(和)中的最后一条评论中提出了理由。大声思考,我认为C#中的原理是初始化代码只到一个地方和一个地方,即构造函数,才是这个决定的原因。添加另一个需要查找初始化代码的地方会使调试更加困难,代码也不那么清晰。

显然,内联初始化值不能包含其他初始化或计算(至少非常有限)。虽然我同意它可以用VB方式更简洁,但我会理解C#团队和Anders Hejlsberg,如果他们说他们认为有一个地方进行初始化是一个更大的优势。

编辑: here's what Microsoft says about it。简而言之,不是C#4.0,而是C#5.0?也:

  

“虽然听起来并不那么容易:   你想要的下一件事是   构造函数初始化支持   领域,但它只能通过   二传手,可能不是什么   你想要的。“

和(只是评论者):

  

“缺少初始化或构造函数   控制实际上使这个功能   对于返回的物业毫无价值   参考类型。“

答案 2 :(得分:0)

虽然我不是微软,但我认为所感知的收益低于实施,测试和支持该功能的成本。

当然,您可以通过声明构造函数来设置默认值,但我同意VB语法更清晰(特别是如果您要使用<DefaultValue(...)>等元数据来装饰它)

答案 3 :(得分:0)

我有一个解决方案,用于将自动属性转换为带有支持字段的属性的繁琐业务:我的插件,AtomineerUtils将使用单个按键为您进行重构。