如何在不使用接口的情况下模拟C#中的多重继承。我相信,接口能力不适用于此任务。我正在寻找更多'面向设计模式'的方式。
答案 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#仅支持单继承,我相信您需要添加更多类。
是否有不使用接口的具体原因?从您的描述中不清楚为什么接口不合适。