[英]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.