Сегодня я обнаружил, что один класс C# может наследовать один интерфейс как неявным, так и явным образом. Это меня удивляет. Если C# работает таким образом, то один экземпляр может вести себя по-разному, если ссылается по-разному.Почему класс C# наследует от одного интерфейса как неявно, так и явно?
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
Я считаю, что этот проект C# сделать непоследовательность поведения. Возможно, что один класс C# может наследовать один интерфейс неявным или эксплицитным способом, но не тот и другой.
Есть ли причина, почему C# сконструирован таким образом?
Я не заметил, что вы можете сделать то и другое. Это кажется немного глупым ... – 2008-10-31 10:26:41
Это не глупо. Прочтите ответы. – 2008-10-31 10:39:25
Извините, что я дважды пытаюсь добавить «явный интерфейс-член-реализация» в качестве тега (это имя используемой функции), но, видимо, этот тег будет слишком длинным. :) – Rytmis 2008-10-31 11:11:03