[英]Create an instance of a List where the type derives from a base class and an interface
[英]How to force a class to implement a property that derives from a specific base class/interface (rather than is of a specific type)
在我的解決方案中,有許多類C1
, C2
, C3
等,它們都從通用抽象基類CB
繼承。
還有許多類D1
, D2
, D3
等,它們充當相應C
類的數據源(例如, C1
的數據源是D1
等類型的局部屬性)。 D
類都繼承自通用的抽象基類DB
,但是實現方式有所不同( C
類使用繼承的和非繼承的屬性和方法)。
現在,我想強加一個規則,即所有C
類(即從CB
派生的)都必須實現“數據源”屬性,並且該屬性的類型必須從DB
派生。
我最初的想法是這樣做:
public abstract class CB
{
protected abstract DB DataSource { get; set; }
etc.
}
但是,這意味着C
類中重寫的DataSource
屬性只能是DB
類型,而不是從DB
派生的類型。
我該如何強加我的規則? 理想情況下, CB
和DB
將保留為抽象基類(因為我希望C
和D
類都繼承非抽象的屬性和方法),但是可以根據需要將它們轉換為接口。 但是,我認為如果這樣做,我會遇到完全相同的問題。
您正在尋找通用類:
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.