Ребята, спасибо за ваши ответы.
Оказывается, что «класс C # может наследовать один интерфейс как неявным, так и явным образом одновременно», на самом деле является иллюзией. Фактически, один класс может наследовать один интерфейс за один раз.
В первоначальном вопросе метод «DoSomething» кажется «неявно реализующим» интерфейс IFoo (метод фактически генерируется VS2008), но на самом деле это НЕ. При явной реализации интерфейса IFoo метод «DoSomething» превращается в обычный метод, который не имеет ничего общего с IFoo, за исключением той же сигнатуры.
Я все еще считаю, что это хитрый дизайн C #, и его легко ошибочно использовать. Скажем, у меня есть такой код
Foo f = new Foo();
f.DoSomething();
Теперь я хочу изменить его код ниже. Кажется, все в порядке, но результат выполнения другой.
Action<IFoo> func = foo => foo.DoSomething();
func(f);