Я наткнулся на эту "функцию" С# - базовый класс, который реализует методы интерфейса, не должен вытекать из него.
Пример:
public interface IContract
{
void Func();
}
// Note that Base does **not** derive from IContract
public abstract class Base
{
public void Func()
{
Console.WriteLine("Base.Func");
}
}
// Note that Derived does *not* provide implementation for IContract
public class Derived : Base, IContract
{
}
Что происходит, так это то, что Derived
волшебным образом набирает открытый метод Base.Func
и решает, что он реализует IContract.Func
.
В чем причина этой магии?
ИМХО: эта функция "квази-реализации" очень неинтуитивная и делает проверку кода намного сложнее. Как вы думаете?