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

时间:2013-05-29 16:03:04

标签: c#

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

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

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

请问有谁可以说出原因是什么?

预感谢...

5 个答案:

答案 0 :(得分:15)

有几点不同,

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

接口非常适合专注于我们可以在课堂上拥有的“视图”。该视图可以由实现该接口的多个类共享。

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

答案 1 :(得分:11)

Interface代表一个契约,而你可以在不同的(抽象)类中实现该契约的多个实现。

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.");
    }
}

答案 2 :(得分:8)

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

答案 3 :(得分:3)

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

接口是一个空shell,只有方法的签名(名称/参数/返回类型)。这些方法不包含任何内容。界面无能为力。这只是一种模式

与接口不同,

抽象类是类。使用起来比较昂贵,因为当你从它们继承时会有查找。

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

从这里引用电子满意(更多信息): What is the difference between an interface and abstract class?

答案 4 :(得分:0)

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

相关问题