空属性声明之间的区别

时间:2011-10-04 07:28:04

标签: c# syntax

  

可能重复:
  C# getters, setters declaration

这些属性声明之间有什么区别?它们是如何工作的,为什么是首选。

public string aString {get;set;}

OR

    private string bString = "";
    public string aString
    {
        get { return bString; }
        set { bString = value; }
    }

注意:这不是一个紧急或重要的问题,而是要求知道为什么某些事情应该以某种方式完成的人。另外,请举例说明哪种方案最适合每种实施方式。

4 个答案:

答案 0 :(得分:3)

首先是automatic property,第二个是我们已知的经典属性。

  

在C#3.0及更高版本中,自动实现的属性生成   当不需要额外的逻辑时,属性声明更简洁   在物业访问者。它们还使客户端代码能够创建   对象。声明属性时,如下所示   例如,编译器创建一个私有的匿名支持字段   只能通过属性的get和set访问器访问。

如果在get和set part属性中没有任何特殊逻辑,那么你可以使用自动属性,因为代码少,代码少,意味着更容易维护,减少错误。

只有在需要在属性上添加一些逻辑(如验证)时,才应切换到经典属性语法。

答案 1 :(得分:1)

<强>设计   如果您需要在确切的分配时刻(提出事件,更改其他字段,保存欠载信息,写入文件以及大量其他可能性),请使用秒。

实用:如果您只是需要调试,请使用秒,因为您无法在自动生成的属性上放置breakpoint

在所有其他情况下首先使用。

答案 2 :(得分:0)

最明显的区别是你不能设置aString变量并返回它,因为你总是返回bString ...

答案 3 :(得分:0)

一个区别是,在自动属性的情况下,您不能拥有私人设置器。这只是一种语言快捷方式或语法糖,使事情更容易开发(生成的代码看起来更干净......)。 如果查看已编译的程序集,编译器将使用与“经典”变体中完全相同的代码。