我偶然发现了 C# 的这个“特性”——实现接口方法的基类不必从它派生。
例子:
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
。
这种魔法背后的原因是什么?
恕我直言:这种“准实现”功能非常不直观,并且使代码检查更加困难。你怎么看?