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

时间:2009-09-06 11:46:50

标签: c# winforms inheritance indexing list

我有一个班级,比如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 []?

感谢。

2 个答案:

答案 0 :(得分:2)

BindingList中的索引器不是虚拟的,因此您无法覆盖它 - 如果您真的想要这样做,则必须隐藏它。

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

答案 1 :(得分:0)

此警告显示索引器已存在于基类中。如果要更改其行为,则应覆盖它(如果它在基类中定义为虚拟)或使用new关键字告诉编译器使用派生索引器方法每当它使用派生类的实例时。