在我的解决方案中,有许多类C1
,C2
,C3
等等都继承自公共抽象基类CB
。
还有许多类D1
,D2
,D3
等作为相应C
类的数据源(例如数据 - C1
的来源是D1
等类型的本地属性。 D
类都继承自公共抽象基类DB
,但实现方式各不相同(C
类使用了继承和非继承属性和方法。)< / p>
现在,我想强制规定所有C
类(即源自CB
)必须实施&#34;数据源&#34;属性,此属性的类型必须派生自DB
。
我最初的想法是这样做:
public abstract class CB
{
protected abstract DB DataSource { get; set; }
etc.
}
但是,这意味着DataSource
类中被覆盖的C
属性只能是DB
类型,而不是从DB
派生的类型。
我如何强加我的规则?理想情况下CB
和DB
仍然是抽象基类(因为我希望C
和D
类继承的每个都有非抽象属性和方法,但是如果需要,它们可以转换为接口。但是,如果我这样做,我认为我有完全相同的问题。
答案 0 :(得分: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; }
}