簡體   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