为什么C#中的基类允许实现接口契约而不inheritance它?
我偶然发现了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
。
这种魔力背后的原因是什么?
恕我直言:这种“准实现”function非常不直观,使代码检查更加困难。 你怎么看?
原因是你的评论完全不正确:
//请注意,Derived不提供IContract的实现
当然可以。 遵循逻辑。
此function非常不直观,使代码检查更加困难。 你怎么看?
如果您不喜欢,我认为您不应该使用该function。 如果您发现使用此function的代码令人困惑和奇怪,那么请鼓励使用此function的同事停止这样做。
此function与派生类中使用基类的方法的任何其他function有何不同? 在派生类中可以使用或提及基类中的方法有许多不同的方法 – 方法调用,覆盖,方法组转换等。
此外,相对而言,这是一个简单,直接的案例。 如果你真的想抱怨在C#中混淆界面语义,我会花时间抱怨界面重新实现语义 。 那个真的好像烤人的面条。 我总是要在规范中看一下这个东西,以确保我的语义正确。
为什么你认为这很奇怪而且不自然? 基类的每个公共成员也是派生类的公共成员。 所以这里没有矛盾。 无论如何,如果你愿意,你可以明确地实现接口。
上述就是C#学习教程:为什么C#中的基类允许实现接口契约而不inheritance它?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1020791.html