专门化继承构造

本文关键字:继承 专门化 | 更新日期: 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");
    }
}