none
请问关于继承ObservableCollection的问题? RRS feed

  • 问题

  • 我想自己继承下ObservableCollection 按照我的需要重新实现下ObservableCollection 部分函数,自己写的继承ObservableCollection的类如下:

    public MyCollection(ObservableCollection<T> realSource): Collection<T>, INotifyCollectionChanged, INotifyPropertyChanged, IEnumerable<T> {        ObservableCollection<T> realSource;         public MyCollection(ObservableCollection<T> realSource)         {              this.realSource = realSource;             realSource.CollectionChanged += (sender, e) =>             {             };         }                  public virtual IEnumerator<T> GetEnumerator()         {             return realSource.GetEnumerator();         }         System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()         {             return realSource.GetEnumerator();         }         public virtual event NotifyCollectionChangedEventHandler CollectionChanged;         public virtual event PropertyChangedEventHandler PropertyChanged;         //IObservableCollection implementation         object this[int i] {             get { return realSource[i + 1]; }            }         int Count { get { return realSource.Count - 1; } } }

    使用的时候这样使用:
    ObservableCollection<InformationModel> Items ; 已经初始化完了已经有数据的
    MyCollection<InformationModel> A = new MyCollection<InformationModel>(Items);

    界面上LISTBOX绑定 A 可是为什么LISTBOX显示不了数据的 ? 如果自定义的MyCollection类在构造函数这样写public MyCollection(ObservableCollection<T> realSource) :base(realSource)就可以显示数据但就不走我自己实现的功能了 ? 我已经在自定义的类实现IEnumerator,GetEnumerator接口了可还是不行的

    2012年9月16日 11:29

答案

  • 你好,

    据我所知,构造方法的继承不同于一般的方法成员,在创建子类(假设类名是A)对象时,编译器首先要做的就是对所有A类的基类上的构造方法先执行一次,然后再执行自己的构造方法。如果在子类的构造方法中,没有指定继承父类的哪个构造方法时,C#会默认调用父类中没有参数的构造方法,如果父类中没有无参的构造函数,这时就会出现构造方法的向上继承出现错误。所以最好显示地调用基类的构造方法。

    如果要隐藏基类的成员,利用密封类。

    2012年9月18日 5:18
    版主