为什么在没有逻辑时使用属性?

时间:2012-06-22 23:16:55

标签: c# properties

我正在阅读有关XNA的教程,它使用以下代码:

private int score = 0;

public int Score
{
    get { return score; }
    set { score = value; }
}

使用房产有什么意义?为什么不使用public int Score = 0;

3 个答案:

答案 0 :(得分:6)

我只想在这里使用自动属性:

public int Score { get; protected set; }

因为它是“同样的东西,少打字”(但实际上可能更好,因为它限制谁可以设置分数; - )

属性的一些原因(超过 public 成员变量):

  1. 属性允许单独设置getter和setter的可见性,如上所示。

  2. 可以在Interfaces中指定属性。 (你 编程对接口...对吗?; - )

  3. 在属性和成员变量之间切换会破坏ABI(应用程序二进制接口:例如需要重新编译)。但是,可以在不破坏ABI的情况下重新定义现有Property的实现

  4. 可以在“属性”中设置断点。偶尔非常方便。

答案 1 :(得分:2)

“封装”

通过公开字段,您可以公开实现细节。未来的“评分”可能不是一个简单的返回值,而是计算的结果,因此通过将其隐藏在抽象的“GetScore”属性函数后面,您可以自由地更改实现的详细信息打破消费者。

请注意,您可以在C#3.0中使用具有属性的自动生成的字段:

public int Score { get; set; } // this will create a hidden field, however all access (even from within the class) must be done by the accessor and mutator methods.

答案 2 :(得分:0)

最大的原因是易于重构以包含逻辑。 (从字段更改为属性需要重新编译引用您的属性的程序集,因为get和set访问器实际上是方法。)正如pst的注释所示,您还可以为get和set分配不同的访问修饰符(例如{{1} })。对于自动属性,通常很少或没有理由(可读性或其他任何原因)使用字段而不是属性。