我有一个如下界面
public interface IX
{
void MethodA();
void MethodB();
}
Run Code Online (Sandbox Code Playgroud)
我在MethodA和MethodB接口中有两个方法契约.我将定义将实现上述接口的类集.在这两种方法中,MethodA对于将实现该接口的所有类型都是通用的.我可以定义一个抽象类,如下所示
public abstract class XBase:IX
{
public void MethodA()
{
// Common behaviour implementation
}
public abstract void MethodB();
}
Run Code Online (Sandbox Code Playgroud)
并将此类继承到需要实现上述接口的所有类型.有用.
但是在抽象类中我添加了'public abstract void MethodB();'.它看起来像是重复MethodB合约.
如果类是抽象的,为什么C#不允许部分接口实现?上面的接口只有两种方法.假设一个接口有10个方法,5个是常用功能,5个不是,我们被迫添加抽象类中不常见的5个方法?
因为C#语言规范是这样说的.第13.4.7节:
与非抽象类一样,抽象类必须提供类的基类列表中列出的接口的所有成员的实现.
为什么C#设计师选择指定这样的语言可能是Eric Lippert最好的答案.我个人猜测减少意外隐藏方法发生的几率,产生很难解释的错误信息.对于接口方法实现,我个人更愿意使用覆盖关键字.但他们选择不这样做.
| 归档时间: |
|
| 查看次数: |
3996 次 |
| 最近记录: |