2011-10-04 41 views
2

Possible Duplicate:
C# getters, setters declaration空的财产申报之间的区别

这些财产申报之间的区别是什么?他们如何工作,为什么是首选。

public string aString {get;set;}

OR

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

注意:这不是一个紧急或重要的问题,而是一个询问谁知道为什么事情应该做某种方式的人的问题。此外,请举例说明哪种情况最适合每种实施。

+0

可能的错字; set {aString = value; }应该可以设置{bString = value; }? – DeCaf

+1

这么多次被问到。尝试搜索。 – Reniuz

+0

另一个可能的错误:自动属性被声明为public;完整的财产是私人的。你真的是这个意思吗? – CesarGon

回答

3

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

In C# 3.0 and later, auto-implemented properties make property-declaration more concise when no additional logic is required in the property accessors. They also enable client code to create objects. When you declare a property as shown in the following example, the compiler creates a private, anonymous backing field that can only be accessed through the property's get and set accessors.

当你没有任何特别的逻辑来在GET添加和设置部分属性,那么你可以只使用自动的性能,因为它更少的代码,更少的代码意味着更容易维护和更少的错误。

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

0

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

1

设计: 使用第二,如果你需要做的确切时刻的东西分配(提高事件,更改其他字段,保存undoredo信息,写入文件以及大量其他可能性)。

实用:使用第二,如果你只需要调试,因为你不能breakpoint上自动生成的属性。

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

0

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