Как симулировать множественное наследование без интерфейсов? - PullRequest
3 голосов
/ 03 октября 2010

Как я могу имитировать множественное наследование в C # без использования интерфейсов.Я верю, что интерфейсы не предназначены для этой задачи.Я ищу более ориентированный на дизайн шаблон.

Ответы [ 5 ]

5 голосов
/ 03 октября 2010

Как сказал Маркус, использование методов интерфейса + расширения для создания чего-то вроде миксинов - это, вероятно, ваша лучшая ставка в настоящее время.

см. Также: Создание миксов с интерфейсами и методами расширения. Автор 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, показной Не легкая работа

3 голосов
/ 03 октября 2010

Множественное наследование в форме класса невозможно, но они могут быть реализованы в многоуровневом наследовании, например:

public class Base {}

public class SomeInheritance : Base {}

public class SomeMoreInheritance : SomeInheritance {}

public class Inheriting3 : SomeModeInheritance {}

Как видите, последний класс наследует функциональность всех трех классов:

  • Base
  • SomeInheritance и
  • SomeMoreInheritance

Но это просто наследование, и делать это таким образом - не хороший дизайн, а просто обходной путь. Интерфейсы, конечно, являются предпочтительным способом множественного унаследованного объявления реализации (не наследования, так как нет функциональности).

1 голос
/ 03 октября 2010

Хотя не совсем множественное наследование, вы можете получить «своего рода смешанную функциональность», комбинируя интерфейсы с методами расширения.

1 голос
/ 03 октября 2010

ECMA-334, § 8.9 Интерфейсы
...
Интерфейсы могут использовать множественное наследование.

Таким образом, для C # (ограниченной) поддержки «множественного наследования»идет, интерфейсы являются официальным способом.

0 голосов
/ 03 октября 2010

Поскольку C # поддерживает только одиночное наследование, я считаю, что вам нужно добавить больше классов.

Существуют ли конкретные причины не использовать интерфейсы?Из вашего описания не понятно, почему интерфейсы не подходят.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...