Я подозреваю, что возникает путаница в отношении того, как интерфейсы были реализованы в C ++, как абстрактные классы и множественное наследование.
В .NET интерфейс - это просто контракт, в котором говорится, что вы будете реализовывать эти методы.
Ваш код не будет компилироваться по той же причине, по которой этот код не будет компилироваться (это было бы с C ++):
public interface IFoo
{
void DoSomething();
}
public abstract class Foo : IFoo
{
}
Foo заявляет, что Foo реализует IFoo, больше ни о ком не говорит.
Если вы хотите заставить производные классы реализовать его, вы должны сделать:
public interface IFoo
{
void DoSomething();
}
public abstract class Foo : IFoo
{
public abstract void DoSomething();
}
Или, если вы действительно хотите, чтобы интерфейсные методы были скрыты явной реализацией, то что-то вроде n8wrl, опубликованное выше.