【问题标题】:How can I overload the [] operators?如何重载 [] 运算符?
【发布时间】:2011-02-20 23:44:06
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    不幸的是,IDictionary<TKey, TValue> 有一大堆成员违反了您的只读要求,这意味着您必须显式地实现许多成员才能在调用它们时抛出 NotImplementedException(或类似的):即,thisAddClearRemove 的设置器。

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

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

    【讨论】:

    • 谢谢!很难搜索[]。我不需要编写自己的界面,但也感谢您的提示。只是你提供的代码就是我现在需要的一切。
    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多