gpt4 book ai didi

c# - 如何在抽象基类中部分实现契约?

转载 作者:太空狗 更新时间:2023-10-29 22:34:52 25 4
gpt4 key购买 nike

我有一个界面如下

 public interface IX
{
void MethodA();
void MethodB();
}

我在接口(interface) MethodA 和 MethodB 中有两个方法契约。我将定义一组将实现上述接口(interface)的类。在这两种方法中,MethodA 对于将实现该接口(interface)的所有类型都是通用的。我可以定义一个抽象类如下

public abstract class XBase:IX
{
public void MethodA()
{
// Common behaviour implementation
}

public abstract void MethodB();
}

并将该类继承给所有需要实现上述接口(interface)的类型。有用。

但是在抽象类中我添加了“public abstract void MethodB();”。看起来像是 MethodB 契约的重复。

如果类是抽象的,为什么 C# 不允许部分接口(interface)实现?上面的接口(interface)只有两个方法。假设一个接口(interface)有10个方法,5个是通用功能,5个不是,我们被迫在抽象类中添加5个不通用的方法?

最佳答案

因为 C# 语言规范是这么说的。第 13.4.7 章:

Like a non-abstract class, an abstract class must provide implementations of all members of the interfaces that are listed in the base class list of the class.

Eric Lippert 可能最好地回答了为什么 C# 设计者选择像这样指定语言。我个人猜测是为了减少发生意外方法隐藏的可能性,从而产生很难解释的错误消息。我个人会更愿意要求使用 overrides 关键字来实现接口(interface)方法。但他们选择不这样做。

关于c# - 如何在抽象基类中部分实现契约?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3312209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com