c# interface clr internals

c# - ¿Cómo implementa.Net CLR una "Interfaz" internamente?



interface internals (2)

¿Solo curiosidad sobre cómo .NET CLR maneja las interfaces internamente?

Q1] ¿Qué sucede cuando CLR encuentra algo así como:

ejemplo de interfaz simple. (lo mismo se usa a continuación).

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 se diferencian (A) y (B) ?

P3: ¿ Las interfaces genéricas se tratan de manera diferente?

(Se siente como un novato cuando hace preguntas básicas como estas ... de todos modos ...)

Thx todo.


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 las tablas de métodos virtuales .

Para una información más profunda, mira esto .


Usar 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 usando 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.