繁体   English   中英

C#覆盖基类集合类型

[英]C# override base class collection type

我有一个基类

     public abstract class BaseClass
    {
     ICollection<int> Numbers {get;set;}
    }

有没有办法得到以下结果?

    public abstract class SubClass : BaseClass
    {
     override ObservableCollection<int> Numbers {get;set;}
    }

那么子类有一个observablecollection或者是否有我可以实现的设计模式?

泛型可以帮助您实现类似的行为:

public abstract class BaseClass<T> where T : ICollection<int>
{
    public T Numbers { get; set; }
}

public abstract class SubClass : BaseClass<ObservableCollection<int>>
{

}

你无法像那样覆盖它。

一种解决方案可能是创建一个具有不同名称的新属性,如下所示:

public abstract class SubClass : BaseClass
{
    public ObservableCollection<int> ObservableNumbers => (ObservableCollection<int>)Numbers;
}

或者如下:(如果你真的需要能够设置它)

public abstract class SubClass : BaseClass
{
    public ObservableCollection<int> ObservableNumbers
    {
        get { return (ObservableCollection<int>)Numbers; }
        set { Numbers = value; }
    }
}

并且不要忘记将Numbers属性设为公共或内部!

你可以尝试下面添加“new”关键字

public abstract class BaseClass
    {
        public virtual ICollection<int> Numbers { get; set; }
    }

    public abstract class SubClass : BaseClass
    {
        public new ObservableCollection<int> Numbers { get; set; }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM