如何重载[]运算符?

dlr*_*as2 8 .net c# dictionary interface operator-overloading

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

我想我可能需要实现一个接口,但我不确定哪一个...

Dan*_*Tao 23

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

public TValue this[TKey key] {
    get { return _dictionary[key]; }
}
Run Code Online (Sandbox Code Playgroud)

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

不幸的是,IDictionary<TKey, TValue>有一大堆成员违反了你的只读要求,这意味着你必须明确地实现许多成员才能NotImplementedException在被调用时抛出(或某些):即,for this,AddClear,和Remove.

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

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