属性支持领域 – 它有什么用?
一方面,我知道属性的可取用途是有一个支持字段,如下例所示:
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; } }
使用支持字段用于常规(非自动实现)属性有什么用处?
如果你这样做:
public int Capacity { get { return Capacity > 0 ? Capacity : -666; } set { Capacity = value; } }
那么你的代码将有一个无限递归。 它永远不会奏效。 那是因为Capacity的getter正在引用它自己。 同样的事情适用于二传手。
除非您使用自动属性,否则您需要一个支持字段
如果您需要访问m_Capacity的实际值,而不是从Capacity属性获得的“托管”值,那么显式私有memberid非常有用,
编辑:其他post正确指出语法错误。 我也应该提到它,但我忽略了它,只是试着回答他的问题,这似乎与自动属性有关
主要是因为你会获得StackOverflow。
不要忘记属性只是生成getter和setter方法的简写语法。 他们看起来像田地,但他们不是。
支持字段支持封装的概念。
封装允许您稍后更改类的实现细节而不更改其接口。
这意味着拥有带有getter和setter的支持字段而不是拥有公共类成员将使您的代码更加强大和/或可读,以供将来的开发人员或您未来使用。