如何强制类实现从特定基类/接口(而不是特定类型)派生的属性

本文关键字:类型 属性 派生 接口 实现 何强制 基类 | 更新日期: 2023-09-27 18:24:57

在我的解决方案中,有许多类C1C2C3等,它们都继承自一个公共抽象基类CB

还有多个类D1D2D3等,它们充当对应的C类的数据源(例如,C1的数据源是D1等类型的本地属性)。D类都继承自公共抽象基类DB,但它们的实现各不相同(C类使用继承的和非继承的属性和方法)。

现在,我想强制执行一条规则,即所有C类(即从CB派生的类)都必须实现一个"数据源"属性,并且该属性的类型必须

我最初的想法是这样做:

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