Множественное наследование в C # - PullRequest
6 голосов
/ 13 августа 2010

Поскольку я работаю C# разработчиком, я знаю, что мы можем реализовать multiple inheritance с помощью Interface.

Может кто-нибудь, пожалуйста, предоставьте мне ссылку ИЛИ код для достижения multiple inheritance с C#.

Мне нужен код для достижения множественного наследования в C# с использованием Interface.

Заранее спасибо.

Ответы [ 5 ]

12 голосов
/ 13 августа 2010

Это не строго множественное наследование - но ваш класс C # может реализовывать несколько интерфейсов, это правильно:

public class MyClass : BaseClass, IInterface1, IInterface2, IInterface3
{
   // implement methods and properties for IInterface1
   ..

   // implement methods and properties for IInterface2
   ..

   // implement methods and properties for IInterface3
   ..
}

Вам необходимо предоставить реализации для всех методов (и свойств), определенных во всех интерфейсах, которые вы планируете реализовать.

Я не совсем понимаю, что вы ищете из своего вопроса .... Вы можете уточнить немного ?? Что ты пытаешься сделать? Где у вас проблемы?

7 голосов
/ 13 августа 2010

Реализация нескольких интерфейсов НЕ замена множественного наследования. Интерфейсы предназначены для указания контракта, которого будет придерживаться класс. Больше похоже на абстрактные классы.

Если вы хотите добиться эффекта множественного наследования, вам может помочь реализация Composite Pattern .

7 голосов
/ 13 августа 2010

Вот хороший пример.

http://blog.vuscode.com/malovicn/archive/2006/10/20/How-to-do-multiple-inheritance-in-C_2300_-2D00-Implementation-over-delegation-_2800_IOD_2900_.aspx

Быстрый предварительный просмотр кода:

interface ICustomerCollection
{
      void Add(string customerName);
      void Delete(string customerName);
}

class CustomerCollection : ICustomerCollection
{
      public void Add(string customerName)
      {
            /*Customer collection add method specific code*/
      }
      public void Delete(string customerName)
      {
            /*Customer collection delete method specific code*/
      }
}

class MyUserControl: UserControl, ICustomerCollection
{
      CustomerCollection _customerCollection=new CustomerCollection();

      public void Add(string customerName)
      {
            _customerCollection.Add(customerName);
      }
      public void Delete(string customerName)
      {
            _customerCollection.Add(customerName);
      }
}
2 голосов
/ 13 августа 2010
class MyClass : IFirstInterface, ISecondInterface, IThirdInterface
{
  // implement the methods of the interfaces
}
1 голос
/ 13 августа 2010

Затем существует наследование от более чем одного интерфейса:

class EmptyClass : IDoSomething, IDoSomethingElse
{
}
interface IDoSomething
{
}
interface IDoSomethingElse
{
}

static class InterfaceExtensions
{
    public static int DoSomething(this IDoSomething tThis)
    {
        return 8;
    }
    public static int DoSomethingElse(this IDoSomethingElse tThis)
    {
        return 4;
    }
}

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

...