我有A和B类,其中B继承自A。两个类都是抽象的,实现了一些方法,一些方法是抽象的,迫使专门的实现实现这些功能。
现在,专门的A(specA)继承自A,专门的B(specB)继承自B.结果(在C#中尝试过)看起来specB不会从specA继承 - specA test = specBInstance;将无法工作(这是有道理的,因为specB不会继承specA ...)。问题是如何设计整个事物,以便specB至少表现得像直接从specA继承?
结果应该是这样的 - 就像对整个层次结构进行特殊化而不仅仅是一个类......
A --<-- specA
|
^ ^ need inheritance here
|
B --<-- specB
答案 0 :(得分:2)
C#不支持多重继承。
您应该考虑赞成合成而不是继承。您希望specB可以访问的specA的功能可以作为单独的类分解并在需要时注入。
阅读有关CAD模型的评论,您可以使用类似“策略模式”的内容。 - 将您的功能分解为单独的类。代码有许多不同的变体,但你可以实现这样的目标:
public class Animal
{
// In this case we pass the sound strategy to the method. However you could also
// get the strategy from a protected abstract method, or you could even use some sort
// of IOC container.
public void MakeSound(SoundStrategy soundStrategy)
{
soundStrategy.MakeSound();
}
}
public class Bark : SoundStrategy
{
public override void MakeSound()
{
Console.WriteLine("Woof");
}
}
public class Meow : SoundStrategy
{
public override void MakeSound()
{
Console.WriteLine("Meow");
}
}
public class BarkLoudly : Bark
{
public override void MakeSound()
{
Console.WriteLine("WOOF");
}
}