代码之家  ›  专栏  ›  技术社区  ›  Rob van Groenewoud

为什么c automatic属性不支持vb 2010这样的默认值?

  •  8
  • Rob van Groenewoud  · 技术社区  · 14 年前

    在查看新的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 回复  |  直到 12 年前
        1
  •  4
  •   Abel    14 年前

    如何:

    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
  •  10
  •   Preet Sangha    14 年前

    为什么不直接在构造函数中默认它们呢?这也是为什么。

        3
  •  0
  •   Rowland Shaw    14 年前

    虽然我不是微软,但我会建议,所感知到的好处要小于实现、测试和支持该功能的成本。

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

        4
  •  0
  •   Jason Williams    14 年前

    我有一个解决方案,用于将汽车属性转换为带有backing字段的属性这一繁琐的业务:my addin, AtomineerUtils 只需按一个键就可以完成重构。