物业有什么特别之处?

时间:2014-02-20 18:24:58

标签: c# properties

我掌握了属性的基础知识,但我没有看到它们的实际用途。它不仅仅返回方程的值吗?我的意思是,如果你可以为它写下一个简单的等式,那么使用属性是没有意义的。

例如:

int currentValue;

public int CurrentValue
{
    get { return currentValue; }
    set { currentValue = value; }
}

与以下内容完全相同:

currentValue;

另一个例子:

    int currentValue;

public int CurrentValue
{
    get { return currentValue * 5; }
    set { currentValue = value; }
}

与以下内容相同:

currentValue = currentValue * 5;

3 个答案:

答案 0 :(得分:4)

在您的第一个示例中,Public Fields versus Automatic Properties是一个很好的答案。基本上,对于非private事物,您应该始终使用属性而不是字段。这使您可以在不破坏内容的情况下执行修改代码等操作,并创建private set。属性还可以在更改时通知代码,或者轻松提供默认值或计算值。并且您可以使用自动属性来减少无关代码:

public int CurrentValue { get; set; }

你的第二个例子不是很好地利用属性,因为它打破了属性如何工作的假设。例如。如果我将属性设置为3并且没有抛出任何异常,那么当我得到它时,我希望它是3,而不是15currentValue = currentValue * 5;,使用字段,属性或局部变量可能有意义,使值5倍大。也许你的意思是这样的:

int currentBackingValue;

public int CurrentValue
{
    get { return currentBackingValue * 5; }
}

如果没有set,这可以很好地工作,并且不会违反任何约定和假设:CurrentValue是基于currentBackingValue计算的。

(顺便说一下,你应该注意到属性的getset ters实际上是方法,只是用类似字段的语法来替换类似Java的{ {1}} / getX标准)

答案 1 :(得分:1)

如果您想为代码添加一些额外的功能,集中您的功能以便您只能在一个地方更改它,那么

Getters和setter属性非常方便。你几乎不知道什么时候你需要改变什么,但你可以做好准备。

这与封装和信息隐藏的概念一起,是基本的OOP概念,但非常重要......


V E R Y     I M P O R T A N T


不要低估这种巨大的力量D:

它如此强大......

答案 2 :(得分:0)

属性也用于许多其他.NET技术,如果没有它们,WPF就无法工作(在setter中调用PropertyChanged事件),WCF在数据协定中广泛使用它们。

特别是与WPF有关,属性的强大之处在于“get”和“set”字段都是函数,因此除了返回或设置支持私有成员之外,还可以做很多事情。这比你想象的要多得多。

示例属性(对于WPF)

public String UIDisplayedString
{
   get { return _member; }
   set 
   { 
      _member = value;
      PropertyChanged(new PropertyChangedEventArgs("UIDisplayedString"));
   }