关于c#:接口和只有一个抽象方法的抽象类之间有什么区别?

What is the difference between an interface and an abstract class that has only one abstract method?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
When to use an interface instead of an abstract class and vice versa?
Interface vs Abstract Class (general OO)

我有

1
2
3
4
public interface MyInterface
{
  void Execute();
}

1
2
3
4
public abstract class MyAbstractClass
{
  public abstract void Execute();
}

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

昨天在一次采访中问我这个问题,我没能回答。

提前谢谢


即使这是一个副本,我也会尽力为您澄清:

Now what will be the difference between the abstract class and the interface when a class will implement them?

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

如果使用接口,则需要实现方法,而不从该类继承,如果需要,还可以灵活地从另一个类继承。

When and what will be the reason for a class to implemenet them when an abstract class has only one abstract method?

不要为了在两种方法之间进行选择而考虑方法的数量,要考虑在使用一种方法与另一种方法时所得到的权衡。

  • 如果决定使用抽象类,派生类将必须从抽象类继承才能工作,而且由于只能从C中的一个类继承,因此您将与抽象类紧密相连。

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

现在,当您想要编写代码的基本部分时,抽象类真的很有用,您的子类将继承这些代码,在这种情况下,您将在子类中编写更少的代码,这意味着可以重用抽象类中编写的代码。此外,您还可以重写抽象方法来提供自己的实现。


正如我们所知道的,OOP有很多实现一件事的方法,但是我们必须遵循最佳实践或使用专门的方法。

在您的场景中,接口和抽象类没有很大的区别,但是您必须了解接口和抽象类之间的区别概念。这是一篇很好的文章:差分接口和抽象类