我读到Interface是隐式纯粹的抽象。那么为什么实现接口的类的方法不使用override关键字作为前缀?
interface IA
{
void Method();
}
class B : IA
{
public void Method() // why it is not "public override void Method()"
{
Console.Writeline("A derived");
}
}
修改 对于那些想知道我在哪里读它的人。转到下面的抽象类v / s接口部分: http://www.codeproject.com/Articles/6118/All-about-abstract-classes
答案 0 :(得分:3)
接口不是纯粹的抽象类,它只是一个接口。
接口声明与公共方法和属性的契约,任何实现它的东西都必须遵守。除签名外,它不提供任何内容。
另一方面,抽象类为其部分或全部功能提供基本实现。它可以提供实际的逻辑。接口不能。
Overriding正在用另一个逻辑替换方法中的逻辑。由于接口从不提供任何逻辑(他们不能),因此使用关键字override
毫无意义。
另外两个非常重要的区别:
答案 1 :(得分:0)
考虑接口的最佳方法是使用 can 关系来考虑它们与您标记它们的类,而不是可以认为是的父类。 关系。
在您的示例中,不需要提及override关键字,因为您没有覆盖任何已实现的行为,您可以简单地说您的类需要履行其合同以提供Method()实现。
尽管接口可以被认为是纯粹的抽象类,但是有一个明显的区别,即类可以被标记为实现多个接口,而它只能从一个父类继承。
class B : IA, IB, IC
因此,您可以将您的类实例作为任何这些接口类型传递,具体取决于您需要向方法公开哪个联系