专门继承构造

时间:2014-07-03 07:13:17

标签: c# inheritance

我有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

1 个答案:

答案 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");
    }
}