2010-08-13 24 views
6

Como estoy trabajando como desarrollador de C#, sé que podemos implementar multiple inheritance mediante el uso de Interface.Herencia múltiple en C#

¿Alguien puede por favor proporcionarme el código O el código de cómo lograr multiple inheritance con C#.

Deseo el código de cómo lograr la herencia múltiple en C# con el uso de Interface.

Gracias de antemano.

+8

En C# puede implementar múltiples interfaces, pero solo puede heredar de una clase. – 7wp

+11

¿Cuándo la implementación de múltiples interfaces llegó a ser igual a la "herencia" múltiple? Implementar e Heredar son dos cosas completamente diferentes. –

+0

@Hasan: no 'completamente', heredar de una interfaz satisface el principio de sustitución. –

Respuesta

7

Aquí hay un buen ejemplo.

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

Una vista previa rápida de código:

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); 
     } 
} 
12

No es la herencia estrictamente múltiple - pero su C# clase puede implementar múltiples interfaces, es cierto:

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 
    .. 
} 

Es necesario proporcionar implementaciones para todos los métodos (y propiedades) definidos en todas las interfaces que estás planeando implementar.

No tengo muy claro qué es lo que busca de su pregunta .... ¿puede aclarar un poco? ¿Que estás tratando de hacer? ¿Dónde te estás metiendo en problemas?

+0

Marc, Quiero saber cómo podríamos obtener un comportamiento exacto en herencia múltiple con la Interfaz al igual que heredamos la clase única. ¿Me gustaría saber también que podemos convertir nuestro objeto actual con otra clase con el uso de la interfaz? (Puede ser que esto se llame MH) – nunu

+7

** no puede ** obtener exactamente el mismo comportamiento con las interfaces de implementación como lo haría con la herencia múltiple verdadera. Las interfaces solo definen una interfaz funcional: no se puede heredar de múltiples implementaciones. Es una aproximación, no un sustituto exacto. –

+1

"herencia múltiple estricta" no existe, sin embargo, parece que algún consenso es que "estricto" significa herencia de implementación múltiple. Como viene, * herencia de interfaz múltiple * es simplemente otra forma de herencia múltiple, de la que existen muchas formas (Meyer describe 16 de esos formularios p824 + en OOSC). – Abel

2
class MyClass : IFirstInterface, ISecondInterface, IThirdInterface 
{ 
    // implement the methods of the interfaces 
} 
7

La implementación de múltiples interfaces es NO un reemplazo de la herencia múltiple. Las interfaces están ahí para especificar el contrato que una clase cumplirá. Más como clases abstractas.

Si desea lograr los efectos de la herencia múltiple, implementar Composite Pattern puede ayudarlo.

1

Luego esta heredar de más de una interfaz:

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; 
    } 
} 

El uso de métodos de extensión en la interfaz que puede tener algo más parecido a la herencia múltiple que sólo viradas en las interfaces. Como los Métodos no son parte de la definición de la interfaz, tampoco es necesario que los implemente en la clase, a menos que lo desee. (No reemplazándolos realmente, necesita una referencia de tipo EmptyClass para llamarlos ya que el tipo de nombre más específico o exacto gana con respecto a los tipos heredados.