3

假设我有 2 个属性

public readonly list<int> numberListReadonly { get; set; }

public list<int> numberListPrivateSet { get; private set; }

对于那些我可以在 Foo 中有一个构造函数/私有函数的属性,我可以启动这些列表而不会出错

public Foo()
{
    numberListReadonly = new list<int>();
    numberListPrivateSet = new list<int>();
}

public void FooInside()
{
    numberListReadonly = new list<int>();
    numberListPrivateSet = new list<int>();
}

当我从课外访问时

void FooOutside()
{
    Foo.numberListReadonly = new List<int>();
    Foo.numberListPrivateSet = new List<int>()
}

编译器抛出错误,这是预期的。
“Foo.numberListReadonly 不能分配给——它是只读的”
“Foo.numberListPrivateSet 不能分配给——它是只读的”


我做了一个搜索,似乎“常见做法”是在“只读”属性上使用私有集,并且在类中具有“设置”的能力
那么带有 set & get 的显式只读属性是否等同于 get & 私有集?

4

3 回答 3

3

不。

私有集意味着您可以在类中的任何位置更改成员的值。带有 set 的只读意味着它只能在构造函数中设置,从而保证它不会在其他任何地方更改。

于 2012-07-26T02:55:55.203 回答
3

使用 readonly 的概念是 - 您只能在初始化时分配值,而不是在那之后。这就是为什么它说 - 只读。

私有集有不同的画面,它允许您在任何时间点修改值,但仅限于类级别。

希望这可以消除您的疑问。

于 2012-07-26T02:56:26.833 回答
2

不,它们是不同的。C# 中的 readonly 修饰符通常用于将字段(而非属性)标记为只读。此属性允许在同一类的构造函数中设置字段值。

对于真正的只读属性,推荐的方法是省略 setter。私有 setter 只是表明该属性不能在类之外设置。

于 2012-07-26T03:00:28.820 回答