gpt4 book ai didi

C#:抽象类需要实现接口(interface)?

转载 作者:IT王子 更新时间:2023-10-29 03:33:30 28 4
gpt4 key购买 nike

我在 C# 中的测试代码:

namespace DSnA
{
public abstract class Test : IComparable
{

}
}

导致以下编译器错误:

error CS0535: 'DSnA.Test' does not implement interface member
'System.IComparable.CompareTo(object)'

既然类Test是一个抽象类,为什么编译器要求它实现接口(interface)呢?这个要求不应该只对具体类强制吗?

最佳答案

在 C# 中,需要实现接口(interface)的类来定义该接口(interface)的所有成员。对于抽象类,您只需使用 abstract 关键字定义这些成员:

interface IFoo
{
void Bar();
}

abstract class Foo : IFoo
{
public abstract void Bar();
}

或者换句话说:您不必“实现”它(这对抽象类来说是一个可怕的限制);然而,在 C# 中,您确实必须告诉编译器您是故意将责任推给具体的子类 - 上面的代码行显示了如何这样做。

提示这不是问题的答案的评论和反对票没有捕获要点。有人来到 Stack Overflow,收到了这个编译器错误,但是有一个抽象类,在这个类中提供实现是错误的,没有一个好的解决方案就被困住了——将不得不编写抛出运行时异常的实现方法,这是一项可怕的工作-around - 直到他们有上述信息。 C# 要求这种明确性是好是坏不在 Stack Overflow 的范围之内,与问题或此答案无关。

关于C#:抽象类需要实现接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2705163/

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