C#:抽象类需要实现接口?
我在C#中的testing代码:
namespace DSnA { public abstract class Test : IComparable { } }
导致以下编译器错误:
error CS0535: 'DSnA.Test' does not implement interface member 'System.IComparable.CompareTo(object)'
由于类Test
是一个抽象类 ,为什么编译器要求它实现接口? 这个要求不应该只针对具体的课程吗?
在C#中,您仍然定义方法,但是不提供一个主体,并将其标记为抽象。 像这样:
interface IFoo { void Bar(); } abstract class Foo : IFoo { public abstract void Bar(); }
换句话说,你不必 “执行”它(这对抽象类来说是一个可怕的限制)。 然而,在C#中,你必须告诉编译器 ,你故意将buck传递给具体的子类 – 上面的代码行显示了如何做。
抱怨这不是对这个问题的回答,这些评论和争议都没有说明问题。 有人来stackoverflow,收到这个编译器错误,但有一个抽象类,其中提供一个实现是一个错误,坚持没有一个好的解决scheme – 将不得不编写实现方法,抛出运行时exception,一个可怕的工作 – 直到他们有了上面的信息。 C#是否需要这种明确性是好还是不好,是不是在stackoverflow的范围之内,而与这个问题和这个答案无关。]
与Java不同,在C#中:“抽象类必须提供类的基类列表中列出的所有接口成员的实现,但抽象类允许将接口方法映射到抽象方法。
https://msdn.microsoft.com/en-us/library/Aa664595(v=VS.71).aspx
他们不必实际实现接口 。
接口方法/属性也可以是抽象的,甚至是虚拟的。 所以它的子类实际上实现它们。