【发布时间】:2011-02-11 21:45:39
【问题描述】:
我在 C# 中的测试代码:
namespace DSnA
{
public abstract class Test : IComparable
{
}
}
导致以下编译器错误:
error CS0535: 'DSnA.Test' does not implement interface member
'System.IComparable.CompareTo(object)'
既然类Test是一个抽象类,为什么编译器需要它来实现接口呢?这个要求不应该只对具体类强制吗?
【问题讨论】:
-
哈哈。我写了一件事然后决定改变它。对不起。 :)
-
基于对已接受答案的反对票和 cmets,我相信反对票的出现是因为问题的措辞方式。 OP 询问“为什么会这样”,这超出了 stackoverflow 的范围。我自己也遇到过这个问题,这个问题更像是“我错过了什么吗?我真的必须提供实现吗?这不会破坏它作为抽象类的意义吗?”答案是“不,您不必提供 实现(这将违反抽象类的目的),但这是您必须做的,以使您的情况正常。”
-
我发现了一个你必须提供实现的案例。这是接口具有可选参数的地方。如果将方法作为抽象包含在基类中,则继承的类在没有可选参数的情况下将无法编译(这违背了可选参数的目的)。在这种情况下,我只是抛出 NotImplementedException。
-
忽略我之前的评论 - 它没有按预期工作,最小意外原则在这里不适用。
标签: c# syntax interface abstract-class