为什么在抽象类存在时我们需要接口?

Ash*_*mar 17 c#

一位采访者问我以下问题,我无法回答:

当抽象类存在时,为什么我们需要接口?

无论我们在接口中编写什么方法,我们也可以在Abstract类中编写.那为什么我们需要单独的接口呢?

谁能告诉你原因是什么?

预感谢...

vc *_* 74 15

有几点不同,

  • 抽象类只能有一个父类,而一个类可以实现多个接口.
  • 接口不能包含任何实现,抽象类可以(除了抽象方法之外,它们还可以有抽象方法).

接口很适合专注于我们可以在课堂上看到的"视图".该视图可以由实现该接口的多个类共享.

例如,DataTable实现了IListSourceISerializable.因此,根据上下文,您可以将其视为列表源来读取其数据,或者将其视为可以序列化实例的类.执行此操作时,您将专注于可以具有实例的特定视图.


Jan*_*kan 11

接口表示合同,而您可以在不同(抽象)类中具有该合同的多个实现.

public interface IExample
{
    void Do();
}

public abstract class DoFirst : IExample
{
    public void Do()
    {
        Console.WriteLine("Doing it the first way");
    }
}

public abstract class DoSecond : IExample
{
    public void Do()
    {
        Console.WriteLine("Doing it the second way");
    }
}

public class DoFirstConcrete : DoFirst, IExample
{
    public void DoSomethingElse()
    {
        Do();
        Console.WriteLine("Doing something else also with first.");
    }
}

public class DoSecondConcrete : DoSecond, IExample
{
    public void DoSomethingElse()
    {
        Do();
        Console.WriteLine("Doing something else also with second.");
    }
}
Run Code Online (Sandbox Code Playgroud)


Pet*_*ter 8

您抽象类是部分实现.接口是契约,以了解您的抽象类可以做什么.您需要一个界面来描述它.


Fab*_*ler 5

您可以实现多个接口,但只能从一个抽象类继承。

一个接口是一个空壳,仅存在的方法的签名(名称/ PARAMS /返回类型)。这些方法不包含任何内容。界面什么也做不了。这只是一种模式

与接口不同,抽象类是类。使用更昂贵,因为从它们继承时需要进行查找。

抽象类看起来很像接口,但它们还有更多的东西:您可以为它们定义行为。更多的是关于一个人说“这些类应该看起来像那样,他们有共同点,所以填空!”。

从这里引用 e-satis(还有更多信息): 接口和抽象类有什么区别?