与抽象类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

与抽象类C#的接口关系

接口不是一个纯粹的抽象类,它只是一个接口。

接口声明了一个具有公共方法和属性的约定,实现它的任何东西都必须遵守这些方法和属性。除了签名,它什么都不提供。

另一方面,抽象类为其部分或全部特性提供了基本实现。它可以提供实际的逻辑。接口不能。

重写是用另一个逻辑替换方法中的逻辑。由于接口从不提供任何逻辑(它们不能),因此使用关键字override是毫无意义的。

另外两个非常重要的区别:

  • 您只能从一个类派生(无论是否抽象),但您可以实现任意数量的接口
  • 可以有实现接口的结构,但不能生成抽象结构,因为结构不能相互继承

考虑接口的最佳方式是将它们与标记它们的类建立can关系,而不是将父类视为的关系。

在您的示例中,不需要提及override关键字,因为您没有覆盖任何已实现的行为,您只是简单地说,您的类需要履行其契约来提供Method()实现。

尽管接口可以被认为是一个纯粹的抽象类,但有一个明显的区别,即一个类可以被标记为实现多个接口,而它只能从一个父类继承。

class B : IA, IB, IC

因此,您可以将类的实例作为这些接口类型中的任何一种传递,这取决于您需要向方法

公开哪个联系人