2010-10-03 2 views
3

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

+2

Является ли это для какого-то реального проекта или это академический вопрос? Если это конкретный проект, пожалуйста, предоставьте более подробную информацию. –

+0

@ Darin Dimitrov, no Это не для конкретизированного проекта. – kofucii

+5

http://www.artima.com/designtechniques/compoinhP.html Композиция против наследования, Билл Веннерс. – rwong

ответ

2

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

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

+1

Вы действительно не отвечаете на вопрос OPs «Как я могу имитировать множественное наследование на C# без использования интерфейсов?» –

+2

@ Кирк: Нет, не знаю.Я отреагировал на то, что я считаю, интерфейсы не предназначены для этого задания task_, на котором основывался вопрос. –

1

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

2

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

public class Base {} 

public class SomeInheritance : Base {} 

public class SomeMoreInheritance : SomeInheritance {} 

public class Inheriting3 : SomeModeInheritance {} 

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

  • Base,
  • SomeInheritance и
  • SomeMoreInheritance

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

+0

+1 Это способ сделать множественное наследование без интерфейсов –

0

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

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

5

Как и Маркус, используя интерфейс + методы расширения, чтобы сделать что-то вроде 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, показной не легкая работа