我正在创建一个将字典填充为私有成员的类。我希望暴露字典的值而不暴露字典本身(以只读方式)。我可以轻松地创建一个属性来公开_dictionary.Keys
,但是如何重载[]
以便{ {1}}返回MyClass[key]
?
我想我可能需要实现一个界面,但我不确定是哪一个......
答案 0 :(得分:23)
我很确定这就是你所追求的目标:
public TValue this[TKey key] {
get { return _dictionary[key]; }
}
如果要实现一个接口,以指示客户端代码可以通过类型为TKey
的索引访问您的类,则最接近的匹配(我知道)为IDictionary<TKey, TValue>
。
不幸的是,IDictionary<TKey, TValue>
有一大堆成员违反了您的只读要求,这意味着您必须明确地实施许多成员才能在他们发送NotImplementedException
(或某些人)时被称为:this
,Add
,Clear
和Remove
的设定者。
也许有一个不同的界面更适合这个目的(像IReadOnlyDictionary<TKey, TValue>
?);我只是没有碰到它。
当然,如果您打算有多个类提供与此类似的功能,您也可以编写自己的界面。
答案 1 :(得分:4)