[英]How to simulate multiple inheritance without interfaces?
如何在不使用接口的情況下模擬C#中的多重繼承。 我相信,接口能力不適用於此任務。 我正在尋找更多'設計模式'導向的方式。
就像Marcus說的那樣使用界面+擴展方法制作類似mixins的東西可能是你目前最好的選擇。
另請參閱: 使用Bill Wagner創建具有接口和擴展方法的Mixins示例:
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,splashy不是一件容易的事
不可能以類的形式進行多重繼承,但它們可以在多級繼承中實現,如:
public class Base {}
public class SomeInheritance : Base {}
public class SomeMoreInheritance : SomeInheritance {}
public class Inheriting3 : SomeModeInheritance {}
如您所見,最后一個類繼承了所有三個類的功能:
Base
, SomeInheritance
和 SomeMoreInheritance
但這只是繼承,這樣做不是好設計,只是一種解決方法。 接口當然是多重繼承實現聲明的首選方式(不是繼承,因為沒有功能)。
ECMA-334,§8.9接口
...
接口可以使用多重繼承。
因此,對於“多重繼承”的C#(有限)支持,接口是官方方式。
雖然不是多重繼承,但您可以通過將接口與擴展方法相結合來獲得“一種混合功能”。
由於C#僅支持單繼承,我相信您需要添加更多類。
是否有不使用接口的具體原因? 從您的描述中不清楚為什么接口不合適。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.