ReadOnlyDictionary之应用场景2011-08-29 博客园 Anders Liu前两天发布了《隐藏接口实现 及 ReadOnlyDictionary》一文,有不少朋友提 出疑问。其中一个主要问题就是,这样做真的可以实现“只读”吗?如果还有其 他变量引用了ReadOnlyDictionary所包装的普通字典,依然可以通过另外这个变 量来修改字典中的内容。有朋友甚至提到了,可以在创建ReadOnlyDictionary时 ,将原有字典中的内容复制出一份,来做到真正的“只读”。其实,这些主要是因为我对这个类的应用场景没有介绍清楚的缘故。其实我这 里提到的ReadOnlyDictionary也好,.NET提供的ReadOnlyCollection也罢,其目 的并不是让整个字典(或集合)真的“只读”,而是希望某些具有字典(或集合 )性质类成员,能够做到“在当前类中可读写,在类的外部只读”。考虑这样一个场景,我要实现一个FileStructure类,表示文件结构,其中包 含了多个Field。每个FileStructure里的每个Field都具有不同的名字,我希望用 户能够用名字检索到对应的字段,所以最好的方式是将字段保存在一个字典中。
public class FileStructure
{
public Dictionary<string, Field> Fields
{
get { return _fields; }
}
public FileStructure()
{
_fields = new Dictionary<string, Field>();
_fields.Add("DosHeader", new Field(...));
_fields.Add("PEHeader", new Field(...));
_fields.Add("OptionalHeader", new Field(...));
}
private Dictionary<string, Field> _fields;
}