繁体   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