2014-09-28 69 views
1

在我的解決方案中,有許多類C1C2C3等等,所有類都繼承來自共同的抽象基類CB如何強制類實現從特定基類/接口(而不是特定類型)派生的屬性

也有許多類D1D2D3等,其充當數據源用於相應C類(例如,數據源C1D1類型等的局部屬性)。 D類全部繼承自共同的抽象基類DB,但其實現方式各不相同(C類使用了繼承和非繼承屬性&方法)。

現在,我想強加的規則,所有C類(即從CB派生)必須實現「數據源」屬性,此屬性必須DB派生的類型。

我最初的想法是這樣:

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

    etc. 
} 

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

我該如何施加我的規則?理想情況下,CBDB將保持抽象基類(因爲我希望CD類繼承每個類都有非抽象屬性和方法),但是如果需要它們可以轉換爲接口。但是,如果我這樣做,我想我也有同樣的問題。

回答

4

你要找的泛型類:

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; } 
} 
+0

我明白第一代碼片段,但對於第二個你不是說: C1應該定義爲: public class C1:CB {protected override D1 DataSource {get;組; }} – Laurence 2014-09-29 12:01:28

相關問題