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

Rob*_*oud 8 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
Run Code Online (Sandbox Code Playgroud)

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

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

Pre*_*gha 10

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

  • 您可以拥有多个构造函数,因此可以有多个默认值.因此,尽管它是一个很好的解决方案,但它并不像提供单个默认值那样干净. (2认同)

Abe*_*bel 4

关于什么:

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

在实践中,我相信这归根结底是一样的,并没有那么多额外的工作。但也许,很长一段时间以来,VB 看起来比 C# 更清晰......;-)

编辑(基本原理):
您在原始问题下(和中)的最后评论中询问基本原理。大声思考,我认为 C# 中初始化代码只到一处且只到一处(即构造函数)的原则是做出这一决定的原因。添加另一个必须查找初始化代码的位置会使调试更加困难并且代码不太清晰。

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

编辑: 这是微软对此的说法。简而言之,不是 C# 4.0,而是 C# 5.0?还:

“但这并不像听起来那么容易:您想要的下一件事是让构造函数初始化支持字段,但它只能通过 setter 来做到这一点,这可能不是您想要的。”

和(只是评论者):

“缺乏初始化或构造函数控制使得该功能对于返回引用类型的属性实际上毫无价值。”