我掌握了属性的基础知识,但我没有看到它们的实际用途。它不仅仅返回方程的值吗?我的意思是,如果你可以为它写下一个简单的等式,那么使用属性是没有意义的。
例如:
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;
答案 0 :(得分:4)
在您的第一个示例中,Public Fields versus Automatic Properties是一个很好的答案。基本上,对于非private
事物,您应该始终使用属性而不是字段。这使您可以在不破坏内容的情况下执行修改代码等操作,并创建private set
。属性还可以在更改时通知代码,或者轻松提供默认值或计算值。并且您可以使用自动属性来减少无关代码:
public int CurrentValue { get; set; }
你的第二个例子不是很好地利用属性,因为它打破了属性如何工作的假设。例如。如果我将属性设置为3
并且没有抛出任何异常,那么当我得到它时,我希望它是3
,而不是15
。 currentValue = currentValue * 5;
,使用字段,属性或局部变量可能有意义,使值5
倍大。也许你的意思是这样的:
int currentBackingValue;
public int CurrentValue
{
get { return currentBackingValue * 5; }
}
如果没有set
,这可以很好地工作,并且不会违反任何约定和假设:CurrentValue
是基于currentBackingValue
计算的。
(顺便说一下,你应该注意到属性的get
和set
ters实际上是方法,只是用类似字段的语法来替换类似Java的{ {1}} / getX
标准)
答案 1 :(得分:1)
Getters和setter属性非常方便。你几乎不知道什么时候你需要改变什么,但你可以做好准备。
这与封装和信息隐藏的概念一起,是基本的OOP概念,但非常重要......
不要低估这种巨大的力量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"));
}