【发布时间】:2021-02-23 07:27:46
【问题描述】:
我有一些抽象基类可用于多个实现。
基类:
public abstract class BaseX
{
public string A { get; set; }
}
public abstract class BaseY : BaseX
{
public string B { get; set; }
}
对于每个用例,我想从这些基类创建特定的类,例如:
public abstract SpecificX : BaseX
{
public string C { get; set; }
}
public abstract SpecificY : BaseY
{
public string D { get; set; }
}
从SpecificY 派生的所有类都应包含所有属性 A、B、C、D。
我现在的问题是,SpecificY 没有来自SpecificX 的属性 C,因为我不能像这样进行多重继承
public abstract SpecificY : BaseY, SpecificX
我唯一的想法是使用这样的接口:
public Interface ISpecificX
{
string C { get; set; }
}
public abstract SpecificX : BaseX, ISpecificX
{
public string C { get; set; }
}
public abstract SpecificY : BaseY, ISpecificY
{
public string D { get; set; }
public string C { get; set; } <== redundancy
}
但是我需要实现 C 两次。一旦 C 变得不仅仅是一个简单的属性,事情就会变得丑陋。有没有更好的方法来创建这种结构?
提前致谢,
弗兰克
【问题讨论】:
-
代替继承,你可以考虑使用你认为你的基类应该是的实例。这样一来,您就可以拥有一个、两个甚至没有所有这些属性。
-
这能回答你的问题吗? Multiple Inheritance in C# 并在 composition 上查找 Chris's answer。
-
请更正您的问题,因为我看不到像
SpecificB或SpecificA这样的课程 -
抱歉,SpecialB|A 输入错误...在问题中更正了
-
@MickyD 感谢您的链接。它并没有真正回答这个问题,或者说,我对组合解决方案非常不满意,可能宁愿做一个接口解决方法来减少SpecificY中冗余的开销以及超出的范围
标签: c# inheritance multiple-inheritance