与抽象类C#的接口关系
本文关键字:接口 关系 抽象类 | 更新日期: 2023-09-27 18:25:35
我读到接口是隐式纯抽象的。那么,为什么实现接口的类的方法不以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
接口不是一个纯粹的抽象类,它只是一个接口。
接口声明了一个具有公共方法和属性的约定,实现它的任何东西都必须遵守这些方法和属性。除了签名,它什么都不提供。
另一方面,抽象类为其部分或全部特性提供了基本实现。它可以提供实际的逻辑。接口不能。
重写是用另一个逻辑替换方法中的逻辑。由于接口从不提供任何逻辑(它们不能),因此使用关键字override
是毫无意义的。
另外两个非常重要的区别:
- 您只能从一个类派生(无论是否抽象),但您可以实现任意数量的接口
- 可以有实现接口的结构,但不能生成抽象结构,因为结构不能相互继承
考虑接口的最佳方式是将它们与标记它们的类建立can关系,而不是将父类视为是的关系。
在您的示例中,不需要提及override关键字,因为您没有覆盖任何已实现的行为,您只是简单地说,您的类需要履行其契约来提供Method()实现。
尽管接口可以被认为是一个纯粹的抽象类,但有一个明显的区别,即一个类可以被标记为实现多个接口,而它只能从一个父类继承。
class B : IA, IB, IC
因此,您可以将类的实例作为这些接口类型中的任何一种传递,这取决于您需要向方法