代码之家  ›  专栏  ›  技术社区  ›  Andy

派生类上索引器的正确实现

  •  0
  • Andy  · 技术社区  · 15 年前

    我有个班,比如说 DerivedBindingList<T> ,其派生自 BindingList<T> .

    我想对派生类使用索引器,并将其编码为:

            public T this[int index]
            {
                get
                {
                    // Getter code
                }
                set
                {
                    // Setter code
                }
            }
    

    但是,编译器会抱怨以下消息:“…隐藏继承的成员”System.Collections.ObjectModel.Collection.This[int]”。如果要隐藏,请使用新关键字。“

    我可以添加“new”关键字,编译器很高兴,但是我应该以某种方式做不同的事情来避免这个警告吗?

    也许我得用碱,不知怎么回事?

    谢谢。

    2 回复  |  直到 15 年前
        1
  •  2
  •   Jon Skeet    15 年前

    索引器在 BindingList 不是虚拟的,所以你不能覆盖它-如果你真的想这样做,你必须隐藏它。

    不过,我不认为我会建议这样做-成员隐藏是导致代码混乱的一个原因。你想做什么?你肯定想从 BindingList<T> 而不是组成它(即有一个类型的成员 绑定列表<t> )是吗?你的新索引器要做什么?

        2
  •  0
  •   Beatles1692    15 年前

    此警告表明基类中已存在索引器。如果要更改索引器的行为,应重写它(如果它在基类中定义为虚拟的),或使用new关键字通知编译器在处理派生类实例时使用派生索引器方法。