是一个带有set& amp;的显式只读属性。相当于得到&私人套餐?

时间:2012-07-26 02:45:30

标签: c#

假设我有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分配给 - 它只读”


我进行搜索似乎“常见做法”是在“readonly”属性上使用私有集,并且能够在类中“设置” 具有set&amp; amp的显式只读属性也是如此。相当于得到&amp;私人套装?

3 个答案:

答案 0 :(得分:3)

没有

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

答案 1 :(得分:3)

使用readonly的概念是 - 您可以仅在启动时分配值,而不是在此之后。这就是为什么它说 - 只读。

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

希望这可以解除你的怀疑。

答案 2 :(得分:2)

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

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