Hoy encuentro que una clase C# puede heredar una interfaz tanto de manera implícita como explícita. Esto me sorprende. Si C# funciona de esta manera, una instancia puede comportarse de manera diferente cuando se hace referencia a ella de manera diferente.¿Por qué una clase C# puede heredar de una interfaz de manera implícita y explícita?
interface IFoo
{
void DoSomething();
}
class Foo : IFoo
{
#region IFoo Members
public void DoSomething()
{
Console.WriteLine("do something implicitly");
}
#endregion
#region IFoo Members
void IFoo.DoSomething()
{
Console.WriteLine("do something explicitly");
}
#endregion
}
Foo f = new Foo();
f.DoSomething();
((IFoo)f).DoSomething();
Por encima de carreras de código y de salida
do something implicitly
do something explicitly
creo que este diseño de C# hacer inconsistencia de comportamiento. Quizás es obligatorio que una clase C# pueda heredar de una interfaz de manera implícita o explícita, pero no ambas.
¿Hay alguna razón por la cual C# está diseñado de esa manera?
No me di cuenta de que podía hacer ambas cosas. Eso parece un poco tonto ... –
No es tonto. Lee las respuestas. –
Disculpa por la doble repetición, estaba intentando agregar "explicit-interface-member-implementation" como una etiqueta (ese es el nombre de la función que estás usando), pero aparentemente esa etiqueta sería demasiado larga. :) – Rytmis