2011-05-26 10 views

Respuesta

3

Una implementación interfaz implícita es donde usted tiene un método con la misma firma de la interfaz.

Una implementación de interfaz explícita es donde declaras explícitamente a qué interfaz pertenece el método.

interface I1 
{ 
    void implicitExample(); 
} 

interface I2 
{ 
    void explicitExample(); 
} 


class C : I1, I2 
{ 
    void implicitExample() 
    { 
     Console.WriteLine("I1.implicitExample()"); 
    } 


    void I2.explicitExample() 
    { 
     Console.WriteLine("I2.explicitExample()"); 
    } 
} 

MSDN: implicit and explicit interface implementations

+0

¿Cuál es la diferencia de uso entonces? ¿Por qué preferirías uno por encima del otro? – Killerwes

+0

Cuando tiene 2 interfaces con la misma firma de método, puede declarar explícitamente 2 métodos que implementan el método para cada una. O si desea que quede claro que existe un método para implementar la interfaz, puede declararlo explícitamente.La declaración implícita existe porque, en general, no es necesario declarar explícitamente, y se puede suponer la implementación de la interfaz. –

2

explícito simplemente significa que especifica la interfaz, implícita significa que no.

Por ejemplo:

interface A 
{ 
    void A(); 
} 

interface B 
{ 
    void A(); 
} 

class Imp : A 
{ 
    public void A() // Implicit interface implementation 
    { 

    } 
} 

class Imp2 : A, B 
{ 
    public void A.A() // Explicit interface implementation 
    { 

    } 

    public void B.A() // Explicit interface implementation 
    { 

    } 
} 
+0

Por lo tanto, public void A en la clase Imp es una interfaz implícita, porque se crea dentro de esa clase, y no tiene una referencia a la interfaz A (no AA()). Si hubiera sido A.A() ¿Hubiera sido una interfaz explícita? ¿Cuál es la diferencia en el uso, entonces? – Killerwes

+0

@Killerwes - Ese es el lado _implementation_, y como tal, estás en lo correcto. Tengo que ser explícito en 'Imp2' ya que ambas interfaces declaran el mismo miembro. En el código de llamada necesita la referencia de interfaz correcta para llamar a las diferentes implementaciones explícitas de 'Imp2'. – Oded

9

Cuando se implementa un explicitlty interfaz, los métodos en que la interfaz sólo será visible si se hace referencia al objeto como la interfaz:

public interface IFoo 
{ 
    void Bar(); 
} 

public interface IWhatever 
{ 
    void Method(); 
} 

public class MyClass : IFoo, IWhatever 
{ 
    public void IFoo.Bar() //Explicit implementation 
    { 

    } 

    public void Method() //standard implementation 
    { 

    } 
} 

Si alguna parte de su código tiene una referencia a este objeto:

MyClass mc = new MyClass(); 
mc.Bar(); //will not compile 

IFoo mc = new MyClass(); 
mc.Bar(); //will compile 

Para el estándar im plementation, no importa la forma en que hacen referencia al objeto:

MyClass mc = new MyClass(); 
mc.Method(); //compiles just fine 
1

Además, si usted quiere saber por qué existe la implementación explícita, eso es porque es posible aplicar el mismo método (nombre y firma) a partir de más de una interfaz; luego, si necesita una funcionalidad diferente, o simplemente los tipos de devolución son diferentes, no puede lograrlo mediante una simple sobrecarga. entonces tendrás que usar implementación explícita. Un ejemplo es que List<T> implementa IEnumerable y IEnumerable<T> y ambos tienen GetEnumerator() pero con diferentes valores de retorno.

Cuestiones relacionadas