【问题标题】:Correct implementation of an indexer on a derived class在派生类上正确实现索引器
【发布时间】:2010-11-26 00:12:36
【问题描述】:

我有一个类,比如DerivedBindingList<T>,它派生自BindingList<T>

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

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

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

我可以添加 'new' 关键字并且编译器很高兴,但我是否应该以某种方式做不同的事情以避免出现此警告?

也许我必须以某种方式使用 base.this[]?

谢谢。

【问题讨论】:

    标签: c# winforms inheritance indexing list


    【解决方案1】:

    这个警告表明一个索引器已经存在于基类中。如果你想改变它的行为,你应该覆盖它(如果它在基类中被定义为虚拟)或者使用 new 关键字告诉编译器使用派生的索引器方法每当它使用派生类的实例时。

    【讨论】:

      【解决方案2】:

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

      我不认为我会建议它 - 隐藏成员是混淆代码的秘诀。你想做什么?您确定要从BindingList<T> 派生而不是组合它(即拥有BindingList<T> 类型的类的成员)?你的新索引器要做什么?

      【讨论】:

      • 我试图从列表中返回一组过滤或未过滤的结果,因此实现了 IBindingListView 和相关的过滤代码。我的班级名称实际上是“FilteringBindingList”。
      猜你喜欢
      • 1970-01-01
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多