假设我有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;私人套装?
答案 0 :(得分:3)
没有
私有集意味着您可以在类中的任何位置更改成员的值。 readonly with set意味着它只能在构造函数中设置,从而保证它不会在其他地方被更改。
答案 1 :(得分:3)
使用readonly的概念是 - 您可以仅在启动时分配值,而不是在此之后。这就是为什么它说 - 只读。
私有集具有不同的图片,它允许您在任何时间点修改值,但仅限于类级别。
希望这可以解除你的怀疑。
答案 2 :(得分:2)
不,他们是不同的。 C#中的readonly修饰符通常用于将字段(非属性)标记为只读。此属性允许在同一个类的构造函数中设置字段值。
真正只读属性的推荐方法是省略setter。私有的setter只是表明该属性不能在类之外设置。