属性支持领域 – 它有什么用?

一方面,我知道属性的可取用途是有一个支持字段,如下例所示:

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的支持字段而不是拥有公共类成员将使您的代码更加强大和/或可读,以供将来的开发人员或您未来使用。