Сегодня я обнаружил, что один класс С# может наследовать один интерфейс как неявным, так и явным образом. Это меня удивляет. Если С# работает таким образом, то один экземпляр может вести себя по-разному, если ссылается по-разному.
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();
Выше кода запускается и выводится
do something implicitly
do something explicitly
Я считаю, что этот дизайн С# делает непоследовательность поведения. Возможно, что один класс С# может наследовать от одного интерфейса неявным или эксплицитным способом, но не тем и другим.
Есть ли причина, почему С# сконструирован таким образом?