簡體   English   中英

如何強制一個類實現從特定基類/接口(而不是特定類型)派生的屬性

[英]How to force a class to implement a property that derives from a specific base class/interface (rather than is of a specific type)

在我的解決方案中,有許多類C1C2C3等,它們都從通用抽象基類CB繼承。

還有許多類D1D2D3等,它們充當相應C類的數據源(例如, C1的數據源是D1等類型的局部屬性)。 D類都繼承自通用的抽象基類DB ,但是實現方式有所不同( C類使用繼承的和非繼承的屬性和方法)。

現在,我想強加一個規則,即所有C類(即從CB派生的)都必須實現“數據源”屬性,並且該屬性的類型必須DB派生。

我最初的想法是這樣做:

public abstract class CB
{
    protected abstract DB DataSource { get; set; } 

    etc.
}

但是,這意味着C類中重寫的DataSource屬性只能是DB類型,而不是從DB派生的類型。

我該如何強加我的規則? 理想情況下, CBDB將保留為抽象基類(因為我希望CD類都繼承非抽象的屬性和方法),但是可以根據需要將它們轉換為接口。 但是,我認為如果這樣做,我會遇到完全相同的問題。

您正在尋找通用類:

public abstract class CB<T> where T : DB
{
    protected abstract T DataSource { get; set; } 

    etc
}

現在, C1應該定義為:

public class C1 : CB<D1>
{
    protected override D1 DataSource { get; set; }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM