1

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

private int score = 0;

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

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

4

3 回答 3

6

我会在这里使用一个自动属性:

public int Score { get; protected set; }

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

属性的一些原因(通过公共成员变量):

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

  2. 属性可以在接口中指定。(您正在针对接口进行编程......对吗?;-)

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

  4. 断点可以在属性中设置。偶尔很方便。

于 2012-06-22T23:20:46.623 回答
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.
于 2012-06-22T23:20:55.710 回答
0

最大的原因是为了便于重构以包含逻辑。(从字段更改为属性需要在引用您的程序集中重新编译,因为 get 和 set 访问器实际上是方法。)正如 pst 的评论所示,您还可以为 get 和 set 分配不同的访问修饰符(例如protected set)。使用自动属性,通常几乎没有理由(在可读性或其他方面)使用字段而不是属性。

于 2012-06-22T23:21:20.780 回答