【发布时间】:2011-02-25 22:22:25
【问题描述】:
我偶然发现了 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。
这种魔法背后的原因是什么?
恕我直言:这种“准实现”功能非常不直观,并且使代码检查更加困难。你怎么看?
【问题讨论】:
-
我“认为”您可以通过在 Derived 类中显式实现接口来解决副作用。
-
这对我来说很有意义。当 Derived 继承 IContract 时,这意味着它提供了 Func(),它确实如此。它通过继承来做到这一点只是偶然的。请注意,Base 不实现 IContract - 如果您尝试将 Base 转换为 IContract,它将失败。
标签: c# interface base-class