C# 如何重载[]运算符?

C# 如何重载[]运算符?,c#,.net,interface,dictionary,operator-overloading,C#,.net,Interface,Dictionary,Operator Overloading,我正在创建一个类,它作为私有成员填充字典。我希望在不公开字典本身的情况下公开字典的值(以只读方式)。我可以轻松创建一个属性来公开\u dictionary.Keys,但是如何重载[],以便MyClass[key]返回\u dictionary[key] 我想我可能需要实现一个接口,但我不确定是哪一个…我很确定这就是您想要的: public TValue this[TKey key] { get { return _dictionary[key]; } } 如果您想实现一个接口,向客户端

我正在创建一个类,它作为私有成员填充字典。我希望在不公开字典本身的情况下公开字典的值(以只读方式)。我可以轻松创建一个属性来公开
\u dictionary.Keys
,但是如何重载
[]
,以便
MyClass[key]
返回
\u dictionary[key]


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

我很确定这就是您想要的:

public TValue this[TKey key] {
    get { return _dictionary[key]; }
}
如果您想实现一个接口,向客户端代码指示您的类可以通过
TKey
类型的索引访问,那么最接近的匹配(我知道)是
IDictionary

不幸的是,
IDictionary
有一大堆成员违反了您的只读要求,这意味着您必须显式实现许多成员,只有在调用它们时才会抛出
NotImplementedException
(或类似的东西):即
this
Add
Clear
,的setter,和
删除

也许有一个不同的接口更适合这个目的(比如
IReadOnlyDictionary
?);我只是没见过


当然,如果您想拥有多个提供类似功能的类,您也可以编写自己的接口。

这称为索引器。见

谢谢!很难搜索
[]
。我不需要写我自己的界面,但也谢谢你的提示。你给我的密码就是我现在需要的一切。