2009-02-28 10 views
60

Duplicar posibles:
C#: Interfaces - Implicit and Explicit implementationimplícita vs implementación de interfaz explícita

qué alguien explicar las diferencias entre estas dos bestias y cómo utilizarlos. AFAIK, muchas clases de pre.2.0 se implementaron sin tipos genéricos, lo que provocó que la última versión implementara ambos tipos de interfaces. ¿Es el único caso por el cual uno necesitaría usarlos?

Se puede también explicar en profundidad cómo usarlos.?

Gracias

Respuesta

95

There is a good and pretty detailed blog post about this.

Básicamente con la implementación de la interfaz implícita que acceden a los métodos de interfaz y las propiedades como si fueran parte de la clase. Con implementaciones de interfaz explícitas, solo puede acceder a ellas cuando las trate como esa interfaz.

En términos de cuándo usaría uno sobre otro, a veces tiene que usar la implementación de interfaz explícita ya que tiene una propiedad/método con la misma firma que la interfaz o quiere implementar dos interfaces con las mismas firmas y tener diferentes implementaciones para esas propiedades/métodos que coinciden.

Las reglas de abajo son de Brad Abrams design guidelines blog.

  • No utilice miembros explícitos como límite de seguridad. Pueden ser llamados por cualquier cliente que emita una instancia a la interfaz.
  • Utilice los miembros explícitos para ocultar los detalles de implementación
  • Utilice miembros explícitos para aproximar las implementaciones de interfaces privadas.
  • Exponga una forma alternativa de acceder a los miembros explícitamente implementados que las subclases pueden anular. Use el mismo nombre de método a menos que surja un conflicto.

También se menciona en los comentarios en el blog de Brad que hay boxeo involucrado al usar la implementación explícita en los tipos de valores, así que tenga en cuenta el costo de rendimiento.

3

Hay otra manera de mirarlo, desde la propia aplicación laberíntica, aquí: http://blogs.msdn.com/cbrumme/archive/2003/05/03/51381.aspx.

Pero en definitiva, la aplicación le da una implícita es-una conversión de tipos, la implementación explícita no serán accesibles a menos que el objeto está explícitamente tipo fundido a ese tipo de interfaz.

+0

Resolviendo conflictos aquí ..... "Implementación implícita" - significa simplemente la implementación simple de un método particular que tiene el mismo nombre y la misma firma que pertenece a la misma clase, donde como "Implementación explícita" - significa la implementación de un método utilizando su Nombre de interfaz con el mismo nombre y firma en esa clase en particular. –

16

En términos simples, si una clase hereda de 2 o más interfaces y si las interfaces tienen los mismos nombres de método, la clase no sabe qué método de interfaz se implementa si utiliza la implementación de interfaz implícita. Este es uno de los escenarios en los que implementaría explícitamente una interfaz.

implícito interfaz Implementtation

public class MyClass : InterfaceOne, InterfaceTwo 
{ 
    public void InterfaceMethod() 
    { 
     Console.WriteLine("Which interface method is this?"); 
    } 
} 

interface InterfaceOne 
{ 
    void InterfaceMethod(); 
} 

interface InterfaceTwo 
{ 
    void InterfaceMethod(); 
} 

Implementación explícita de interfaces

public class MyClass : InterfaceOne, InterfaceTwo 
{ 
    void InterfaceOne.InterfaceMethod() 
    { 
     Console.WriteLine("Which interface method is this?"); 
    } 

    void InterfaceTwo.InterfaceMethod() 
    { 
     Console.WriteLine("Which interface method is this?"); 
    } 
} 

interface InterfaceOne 
{ 
    void InterfaceMethod(); 
} 

interface InterfaceTwo 
{ 
    void InterfaceMethod(); 
} 

El siguiente enlace tiene un excelente video que explica este concepto
Explicit Interface Implementation

Cuestiones relacionadas