当使用具有List或类似类型的只读属性的自定义类(即ObservableCollection)时,仍然可以“获取”变量并在其上调用Add()方法来更改内容。
有没有办法在“外部”访问时停止此操作(不会创建List类的巨大重载),或者如果不应在其类之外编辑它们,以另一种方式处理列表是“最佳实践” ?
答案 0 :(得分:5)
当您将引用类型十分转换为只读时,只读取对象的引用。对象本身仍然可以修改。对于List,您可以使用ReadOnlyCollection来公开集合,以便它不能被修改(并且您仍然可以在内部使用List来存储/修改数据。
FxCop实际上有一个规则来捕捉这些情况:
Do not declare read only mutable reference types
private List<string> _internalList = new List<string>();
public ReadOnlyCollection<string> ListProperty
{
get
{
return _inernalList.AsReadOnly();
}
}
应该这样做。
答案 1 :(得分:2)
您应该公开任何类型的属性:
ReadOnlyCollection<T>
在只读引用属性的情况下,“只读”是对象的引用 - 它不会使对象不可变。