For example let's declare:
private readonly List<string> _strings = new List<string>();
public IEnumerable<string> Strings
{
get
{
return _strings;
}
}
现在我们可以做以下事情:
((List<string>) obj.Strings).Add("Hacked");
所以我们实际上并没有隐藏List
的使用,只是将它隐藏在接口后面。如何在不复制_strings
到新集合中的情况下隐藏列表以限制对列表的修改?
List<T>
更改为类似于T[]
的东西,然后观察强制转换错误的出现。这教导了编写接口(或公共契约)而不是实现的经验教训 :-) - Adam Houldsworth