C#中的属性getter setter

时间:2011-09-24 05:54:53

标签: c# automatic-properties

我有一个类库项目。我在下面有一个属性。它不是只读属性

 private   Int32 ABC  ;
public Int32   ABCD
        {
            set
            {
                this.ABC = value;
            }
            get
            {
                return this.ABC;
            }
        }

我的问题是,是否有必要声明私有变量和getter / setter?

修改

我的意思是它会像下面一样吗?

public Int32 ABCD {}

6 个答案:

答案 0 :(得分:5)

Automatic property声明需要括号中的get; set;语句(这是您在原始问题中的说法):

public Int32 ABCD { get; set; }

空属性块无效。

答案 1 :(得分:3)

使用C#3.0(VS 2008)或更高版本中引入的自动实现的属性。
http://msdn.microsoft.com/en-us/library/bb384054.aspx

public Int32 Abcd {get;set;}

编译器会为您创建支持字段。但它是匿名的,无法访问。如果稍后您发现需要访问支持字段,则可以显式声明它并使用该字段重新实现getter和setter,而不会破坏您的界面。

答案 2 :(得分:2)

使用自动实施的属性,它引自2008年:

    public Int   ABCD
    {
        set;
        get;
    }

但差异是默认值,即在具有支持字段的属性中,您可以在变量中设置默认值,但在这种情况下,默认值为.net默认值。 (实际上你应该在构造函数中为默认值启动它。)

答案 3 :(得分:1)

如果你做第二个选择,C#将为你创建第一个选择。

答案 4 :(得分:1)

  

是否有必要声明私有变量和getter / setter?

如果你的意思是是否需要使用私有变量然后是,那就是(除非你使用BoltClock提到的自动方法)。你应该记住它是一个完整的代码块,所以你可以在那里做任何你喜欢的事情 - 虽然你应该在合理的范围内做,因为你不希望任何会减慢对属性的访问速度太多的事情。 / p>

例如,更改属性可能会产生副作用,即可能需要更新其他属性,或者您可能必须通知其他属性也已更改。

如果你没有通知或做任何其他事情,那么自动getter / setter方法开发得更快(不是声称它是执行速度最快(或最慢))。

答案 5 :(得分:1)

你可以这样做

public string ABCD { get;set;}