专门化继承构造
本文关键字:继承 专门化 | 更新日期: 2023-09-27 18:11:26
我有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
c#不支持多重继承。
您可能应该考虑更倾向于组合而不是继承。可以将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");
}
}