eta*_*sov 18 c# interface base-class
我偶然发现了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.
这魔术背后的原因是什么?
恕我直言:这种"准实现"功能非常不直观,使代码检查更加困难.你怎么看?
Eri*_*ert 32
原因是你的评论完全不正确:
//注意派生并没有对IContract提供实施
当然可以.遵循逻辑.
此功能非常不直观,使代码检查更加困难.你怎么看?
如果您不喜欢,我认为您不应该使用该功能.如果您发现使用此功能的代码令人困惑和奇怪,那么请鼓励使用此功能的同事停止这样做.
此功能与派生类中使用基类的方法的任何其他功能有何不同?在派生类中可以使用或提及基类中的方法有许多不同的方法 - 方法调用,覆盖,方法组转换等.
此外,这相对来说是一个简单,直接的案例.如果你真的想抱怨在C#中混淆界面语义,我会花时间抱怨界面重新实现语义.那个真的好像烤人的面条.我总是要在规范中查看这个东西,以确保我正确地获得了语义.