为什么我可以像这样实现只读属性...
public IList<object> SelectedItems { get; }
Run Code Online (Sandbox Code Playgroud)
...当我使用该属性时,仍然可以使用其成员,如添加,删除等?
是不是应该只读"一路向下"?
Ree*_*sey 12
是不是应该只读"一路下来"?
这不是"只读"类型.它是一个属性,您可以在其中检索值(IList<object>),但不能将值设置为不同的实例,IList<object>因为没有属性设置器.
不.它不是只读"一直向下" - 事实上该物业只有一个吸气剂意味着你可以获得价值,但你可以做任何你想做的事情.
请注意,我要小心使用"readonly"一词.C#具有不同的,不同的含义和专用readonly关键字,仅适用于字段.这在C#意义上不是"只读",而是仅提供get操作的属性.
如果你想要一个"只读"列表,一个很好的选择是返回一个ReadOnlyCollection<T>.例如,如果您的内部类是a List<T>,则可以使用:
public IList<object> SelectedItems { get { return this.selected.AsReadOnly(); } }
Run Code Online (Sandbox Code Playgroud)
如果你打算这样做,那么实际返回也可能更好ReadOnlyCollection<T>:
public ReadOnlyCollection<object> SelectedItems { get { return this.selected.AsReadOnly(); } }
Run Code Online (Sandbox Code Playgroud)
这样,用户就不会期望调用.Add()结果列表是安全的.