如何重载[]运算符?

时间:2010-05-18 16:12:53

标签: c# .net interface dictionary operator-overloading

我正在创建一个将字典填充为私有成员的类。我希望暴露字典的值而不暴露字典本身(以只读方式)。我可以轻松地创建一个属性来公开_dictionary.Keys,但是如何重载[]以便{ {1}}返回MyClass[key]

我想我可能需要实现一个界面,但我不确定是哪一个......

2 个答案:

答案 0 :(得分:23)

我很确定这就是你所追求的目标:

public TValue this[TKey key] {
    get { return _dictionary[key]; }
}

如果要实现一个接口,以指示客户端代码可以通过类型为TKey的索引访问您的类,则最接近的匹配(我知道)为IDictionary<TKey, TValue>

不幸的是,IDictionary<TKey, TValue>有一大堆成员违反了您的只读要求,这意味着您必须明确地实施许多成员才能在他们发送NotImplementedException(或某些人)时被称为:thisAddClearRemove的设定者。

也许有一个不同的界面更适合这个目的(像IReadOnlyDictionary<TKey, TValue>?);我只是没有碰到它。

当然,如果您打算有多个类提供与此类似的功能,您也可以编写自己的界面。

答案 1 :(得分:4)