一方面,我知道属性的可取用途是有一个支持字段,如下例所示:
private int m_Capacity;
public int Capacity
{
get { return m_Capacity > 0 ? m_Capacity : -666; }
set { m_Capacity = value; }
}
另一方面,使用上面的示例而不是丢弃字段并仅将属性用于所有目的,我会得到什么好处,如下例所示:
public int Capacity
{
get { return Capacity > 0 ? Capacity : -666; }
set { Capacity = value; }
}
对常规(非自动实现)属性使用支持字段有什么好处?
答案 0 :(得分:24)
如果你这样做:
public int Capacity
{
get { return Capacity > 0 ? Capacity : -666; }
set { Capacity = value; }
}
然后你的代码将有一个无限递归。它永远不会奏效。那是因为Capacity的getter正在引用它自己。同样适用于制定者。
除非您使用自动属性,否则您需要一个支持字段
答案 1 :(得分:5)
如果您需要访问m_Capacity的实际值,而不是从Capacity属性获取的“托管”值,则显式私有成员ID非常有用,
编辑:其他帖子正确指出了语法错误。我也应该提到它,但我忽略了它,并试图回答他的问题,这似乎是关于自动属性
答案 2 :(得分:2)
主要是因为你会得到一个StackOverflow。
答案 3 :(得分:2)
不要忘记属性只是生成getter和setter方法的简写语法。它们看起来像田地,但它们不是。
答案 4 :(得分:2)
支持字段支持封装的概念。
Encapsulation允许您稍后更改类的实现细节而不更改其接口。
这意味着拥有带有getter和setter的支持字段而不是拥有公共类成员将使您的代码对于未来的开发人员或将来的自己更加健壮和/或可读。