属性:专用的仅支持后备字段与自动实现的+构造函数

时间:2012-01-24 01:35:20

标签: c#

private readonly PlayerCollection players = new PlayerCollection();

public PlayerCollection Players { get { return players; } }

public PlayerCollection Players { get; private set; }

public MyClass()
{
    Players = new PlayerCollection();
}

哪个更好?是否存在两种方式中最适合的方式?

4 个答案:

答案 0 :(得分:4)

第一种方式的优点是该字段为readonly,因此您无法在该类的其他位置再次设置该字段;第二种方式的优势在于它不是,所以你可以。在我看来,这是他们之间做出决定的好方法 - 您希望该字段为readonly吗?如果是这样,第一种方式;如果不是,第二种方式。

答案 1 :(得分:1)

在第一种情况下,编译器将确保即使从MyClass内部也不能更改该值。否则它可能是一个洗,你更喜欢的选择。

答案 2 :(得分:1)

从来电者的角度来看,两者之间没有区别。但是,在第一个示例中,没有人(甚至不是MyClass)可以将Players设置为构造函数之外的新PlayerCollection。如果希望编译器强制执行此限制,请使用(1)。否则,请使用(2)。

答案 3 :(得分:0)

使用自动实现。你必须在构造函数中初始化readonly,并且几乎从来没有使用private和readonly相互结合使用。

至少自动实现解决方案允许您在构造函数外部进行初始化,并且仍然只允许从内部进行赋值。