En realidad, hay una buena razón para este comportamiento. Considera el siguiente código.
public interface IA
{
IA DoSomething();
}
public interface IB
{
IB DoSomething();
}
public class Test : IA, IB
{
public IA DoSomething() { return this; }
IA IA.DoSomething() { return this; }
IB IB.DoSomething() { return this; }
}
En este escenario la clase Test
debe implementar al menos uno de los métodos DoSomething
explícitamente porque no es legal para declarar dos métodos diferentes con la misma firma. Si tuviera que examinar el IL, vería que implementar explícitamente una interfaz decora automáticamente el nombre del miembro para que no haya dos miembros con el mismo nombre en la misma clase. Y para poder invocar cada una de las 3 variaciones diferentes de DoSomething
arriba, debe invocar al miembro desde una referencia del tipo correcto. Así es como el compilador sabe vincularse al miembro correcto.
public static void Main()
{
var test = new Test();
test.DoSomething(); // Compiler binds to the implicit implementation.
var a = (IA)test;
a.DoSomething(); // Compiler binds to the IA implementation.
var b = (IB)test;
b.DoSomething(); // Compiler binds to the IB implementation.
}