列表类型绕过ReadOnly属性?

pet*_*bil 1 .net oop list

当使用具有List或类似类型的只读属性的自定义类(即ObservableCollection)时,仍然可以"获取"变量并在其上调用Add()方法来更改内容.

有没有办法在"外部"访问中阻止这种情况(不会产生List类的巨大重载),或者如果不应该在类之外编辑它们,以另一种方式处理列表是"最佳实践"吗?

Jus*_*ner 5

将引用类型转换为只读时,只读取对象的引用.对象本身仍然可以修改.对于List,您可以使用ReadOnlyCollection来公开集合,使其无法修改(您仍然可以在内部使用List来存储/修改数据.

FxCop实际上有一个规则来捕捉这些情况:

不要声明只读可变引用类型

private List<string> _internalList = new List<string>();

public ReadOnlyCollection<string> ListProperty
{
    get
    {
        return _inernalList.AsReadOnly();
    }
}
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩.