gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 21:27:35 26 4
gpt4 key购买 nike

在我的解决方案中,有许多类 C1 , C2 , C3等等,都继承自一个公共(public)抽象基类 CB .

还有一些类D1 , D2 , D3等作为相应 C 的数据源类(例如 C1 的数据源是 D1 类型的本地属性等)。 D所有类都继承自一个公共(public)抽象基类 DB ,但它们的实现各不相同(C 类使用继承和非继承的属性和方法)。

现在,我想强加一条规则,所有C类(即派生自 CB 的类)必须实现“数据源”属性,并且此属性的类型必须派生自 DB .

我最初的想法是这样做:

public abstract class CB
{
protected abstract DB DataSource { get; set; }

etc.
}

但是,这意味着重写 DataSource C中的属性(property)类只能是 DB 类型, 不是派生自 DB 的类型.

我如何实现我的规则?理想CBDB将保留抽象基类(因为我希望 CD 类继承每个类中的非抽象属性和方法),但如果需要,它们可以转换为接口(interface)。但是,我认为如果我这样做,我会遇到完全相同的问题。

最佳答案

您正在寻找泛型类:

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

关于c# - 如何强制类实现从特定基类/接口(interface)(而不是特定类型)派生的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26089956/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com