2014-09-28 153 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

相关问题