【发布时间】:2011-02-20 23:44:06
【问题描述】:
我正在创建一个将字典填充为私有成员的类。我想公开字典的值而不公开字典本身(以只读方式)。我可以轻松地创建一个属性来公开_dictionary.Keys,但是如何重载[],以便MyClass[key] 返回@ 987654324@?
我想我可能需要实现一个接口,但我不确定是哪一个...
【问题讨论】:
标签: c# .net interface dictionary operator-overloading
我正在创建一个将字典填充为私有成员的类。我想公开字典的值而不公开字典本身(以只读方式)。我可以轻松地创建一个属性来公开_dictionary.Keys,但是如何重载[],以便MyClass[key] 返回@ 987654324@?
我想我可能需要实现一个接口,但我不确定是哪一个...
【问题讨论】:
标签: c# .net interface dictionary operator-overloading
我很确定这就是你所追求的:
public TValue this[TKey key] {
get { return _dictionary[key]; }
}
如果您想实现一个接口以向客户端代码指示您的类可以通过TKey 类型的索引访问,最接近的匹配(据我所知)是IDictionary<TKey, TValue>。
不幸的是,IDictionary<TKey, TValue> 有一大堆成员违反了您的只读要求,这意味着您必须显式地实现许多成员才能在调用它们时抛出 NotImplementedException(或类似的):即,this、Add、Clear 和 Remove 的设置器。
也许有一个不同的界面更适合这个目的(比如IReadOnlyDictionary<TKey, TValue>?);我只是没有遇到过。
当然,如果您打算拥有多个提供类似功能的类,您也可以编写自己的接口。
【讨论】:
[]。我不需要编写自己的界面,但也感谢您的提示。只是你提供的代码就是我现在需要的一切。
【讨论】: