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