接口和只有一个抽象方法的抽象类有什么区别?

时间:2012-07-20 05:07:52

标签: c# oop interface abstract-class

  

可能重复:
  When to use an interface instead of an abstract class and vice versa?
  Interface vs Abstract Class (general OO)

我有

public interface MyInterface
{
  void Execute();
}

并且

public abstract class MyAbstractClass
{
  public abstract void Execute();
}

现在,当一个类实现它们时,抽象类和接口之间的区别是什么?当抽象类只有一个抽象方法时,类何时以及什么原因才能实现它们?

我昨天在接受采访时问过这个问题。我没有回答......

提前致谢

2 个答案:

答案 0 :(得分:5)

即使这是重复的,我也会尝试为您澄清:

  

现在,当一个类实现它们时,抽象类和接口之间的区别是什么?

如果使用抽象类,区别在于您需要从抽象类继承然后覆盖抽象方法。

如果使用接口,则需要实现该方法,而不必继承此类,从而可以根据需要灵活地从其他类继承

  

当抽象类只有一个抽象方法时,类何时以及什么原因才能实现它们?

不要考虑方法的数量,以便在一方或另一方之间做出选择,想一想在使用方法时可以获得的权衡。

  • 如果您决定使用抽象类,派生类将必须继承形成您的抽象类才能工作,因为您只能从C#中的一个单元类继承,你会对抽象类很紧张。

  • 如果您实现了一个接口,您将能够从另一个类层次结构继承,换句话说,使用接口将为您提供最灵活的设计

现在抽象类非常有用,当你想编写一个基本代码段时,你的子类将继承,在这种情况下,你将在你的子类中编写更少的代码efectivley重用你的抽象类中编写的代码。您还可以覆盖抽象方法以提供自己的实现

答案 1 :(得分:1)

我们知道有很多方法可以实现一件事。但我们必须遵循最佳实践或使用专门的方法。

在您的场景中,接口和抽象类没有太大区别。但是您必须寻找接口和抽象之间差异的概念。 这是一篇很好的文章:Difference Interface and Abstract Class