IEnumerable 类型不能确保只读
在你创建的类型中, 暴露了一个类型为 IEnumerable 的只读属性, 但是调用者依然可 以通过类型转换来修改属性的内容, 比如这样:
class Program {
static void Main(string[] args) {
MyClass myClass = new MyClass();
((List<string>)myClass.ReadOnlyNameCollection).Add("######From Client#####");
myClass.Print();
}
}
class MyClass {
List<string> _nameCollection = new List<string>();
public MyClass() {
_nameCollection.Add("Rob");
_nameCollection.Add("John");
_nameCollection.Add("Jummy");
_nameCollection.Add("Derek");
}
public IEnumerable<string> ReadOnlyNameCollection {
get { return _nameCollection.AsEnumerable(); }
}
public void Print() {
foreach (var item in ReadOnlyNameCollection) {
Console.WriteLine(item);
}
}
}