2010-07-16 15 views
6

¿Solo curiosidad sobre cómo .NET CLR maneja las interfaces internamente?¿Cómo implementa .Net CLR una "Interfaz" internamente?

Q1] ¿Qué pasa cuando CLR se encuentra con algo como: (. Mismos que se utilizan a continuación)

simple interface example.

interface ISampleInterface 
    { 
     void SampleMethod(); 
    } 

    class ImplementationClass : ISampleInterface 
    { 
     // Explicit interface member implementation: 
     public void SampleMethod() 
     { 
      // Method implementation. 

     } 

     static void Main() 
     { 
      //Declare an interface instance. 
      ISampleInterface mySampleIntobj = new ImplementationClass(); // (A) 
      // Call the member. 
      mySampleIntobj.SampleMethod(); 

      // Declare an interface instance. 
      ImplementationClass myClassObj = new ImplementationClass(); // (B) 
      //Call the member. 
      myClassObj.SampleMethod(); 

     } 
    } 

P2: En el ejemplo anterior cómo son (A) y (B) diferenciado?

Q3: ¿Se tratan Generic Interfaces de manera diferente?

(siento como un novato cuando se hacen preguntas básicas como estos ... de todos modos ....)

Thx todos.

+0

ya que es solo en parte una respuesta Lo dejo aquí. Para comenzar con su código mySampleIntobj.SampleMethod(); y myClassObj.SampleMethod(); podría llamar a dos métodos diferentes. El primero llamará a cualquier método explícitamente implementado que coincida con la llamada, el segundo no. solo en el caso donde no hay una coincidencia de método explícita, ¿llamarán al mismo método? –

+0

¿Esto compila? AFAIK, deberías tener un 'SampleMethod()' público para la llamada (B). – Humberto

+0

oh sí lo siento ... editado/corregido ahora :) thx :) – Amitd

Respuesta

2

Prácticamente no hay diferencias en esos bits de código. Ambos terminan llamando a la misma función. Puede haber beneficios de rendimiento menores al llamar al método a través del tipo de clase.

Si desea saber cómo se implementan estas cosas, eche un vistazo a Virtual Method Tables.

Para obtener más información, consulte this.

+0

wow el segundo enlace parece muy desalentador para comprender :) – Amitd

+0

no después de leerlo 10 veces. –

+0

léelo tres veces y todavía no lo consigue :) ... sigo intentando;) – Amitd

-5

El uso de la interfaz al crear la referencia de objeto se considera una práctica mejor en comparación con la instanciación directa con un tipo de clase. Esto viene bajo la programación a un principio de interfaz.

Esto significa que puede cambiar la clase concreta que implementa la misma interfaz en tiempo de ejecución mediante algo como inyección de dependencia o incluso puede ser reflejo. No será necesario cambiar su código si programa en una interfaz en comparación con la programación en un tipo concreto.

+0

Esto parece una mejor explicación de la programación de una interfaz http://stackoverflow.com/questions/1848442/what-excaly-is-interface-based-programming – Amitd

+0

Principalmente correcto, pero fuera del tema. No responde la pregunta. Downvoted. –

Cuestiones relacionadas