如何在没有接口的情况下模拟多重继承?

时间:2010-10-03 08:26:32

标签: c# design-patterns coding-style

如何在不使用接口的情况下模拟C#中的多重继承。我相信,接口能力不适用于此任务。我正在寻找更多'面向设计模式'的方式。

5 个答案:

答案 0 :(得分:5)

就像Marcus所说,使用界面+扩展方法制作类似mixins的东西可能是你目前最好的选择。

另见:Create Mixins with Interfaces and Extension Methods by Bill Wagner 例如:

using System;

public interface ISwimmer{
}

public interface IMammal{
}

class Dolphin: ISwimmer, IMammal{
        public static void Main(){
        test();
                }
            public static void test(){
            var Cassie = new Dolphin();
                Cassie.swim();
            Cassie.giveLiveBirth();
                }
}

public static class Swimmer{
            public static void swim(this ISwimmer a){
            Console.WriteLine("splashy,splashy");
                }
}

public static class Mammal{
            public static void giveLiveBirth(this IMammal a){

        Console.WriteLine("Not an easy Job");
            }

}

打印 splasshy,引人注意 不是一件容易的事

答案 1 :(得分:3)

以类的形式进行多重继承是不可能的,但它们可以在多级继承中实现,如:

public class Base {}

public class SomeInheritance : Base {}

public class SomeMoreInheritance : SomeInheritance {}

public class Inheriting3 : SomeModeInheritance {}

正如您所看到的,最后一个类继承了所有三个类的功能:

  • Base
  • SomeInheritance
  • SomeMoreInheritance

但这只是继承,这样做不是好设计,只是一种解决方法。接口当然是多重继承实现声明的首选方式(不是继承,因为没有功能)。

答案 2 :(得分:1)

  

ECMA-334,§8.9接口
    ...
    接口可以使用多重继承。

因此,对于“多重继承”的C#(有限)支持,接口是官方方式。

答案 3 :(得分:1)

虽然不是多重继承,但您可以通过将接口与扩展方法相结合来获得“一种混合功能”。

答案 4 :(得分:0)

由于C#仅支持单继承,我相信您需要添加更多类。

是否有不使用接口的具体原因?从您的描述中不清楚为什么接口不合适。