我偶然发现了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
{
}
Run Code Online (Sandbox Code Playgroud)
会发生什么事情,Derived神奇地采用公共方法Base.Func,并决定它将实施IContract.Func.
这魔术背后的原因是什么?
恕我直言:这种"准实现"功能非常不直观,使代码检查更加困难.你怎么看?
using System;
public interface MustImplement
{
public void DoSomething();
}
public class Base
{
public void DoSomething()
{
Console.WriteLine("Something must be done");
}
}
public class Child: Base, MustImplement
{
//I don't have to implement the MustImplement interface here since the base class did it.
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,子类仅使用DoSomething()基类中的实现,并且编译器将其视为有效。
我看到有人在他们的代码中做了类似的事情,这就是为什么我创建一个代码片段只是为了传达这个想法。
有什么理由我们应该这样做而不是在基类中执行public class Base: MustImplement和实现?public virtual void DoSomething()