簡體   English   中英

如何在沒有接口的情況下模擬多重繼承?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM