关于c#:抽象类和接口之间有什么区别?

Whats the difference between an abstract class and interface? When would you want to use them?

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

Possible Duplicate:
When to use an interface instead of an abstract class and vice versa?
Difference between Interface, abstract class, sealed class, static class and partial class in C#?

1
2
3
4
5
6
7
8
9
public class Guru{
    public Enemy(int x, int y, int health, int attack, ...) {
        ...
    }
    ...
}
public class UserDefinedClass extends Enemy {
    ...
}


如果预期要创建组件的多个版本,请创建一个抽象类。抽象类提供了一种简单易行的方法来版本化您的组件。通过更新基类,所有继承类都将随更改自动更新。另一方面,接口一旦创建就不能更改。如果需要接口的新版本,则必须创建一个全新的接口。

  • 接口无法实现方法。
  • 抽象类可以实现方法。

  • 一个接口只能从另一个接口继承。

  • 抽象类可以从类和一个或多个接口继承。

  • 接口不能包含字段。

  • 抽象类可以包含字段。

OAN接口意味着对象和想要使用它的代码之间可能存在的最小耦合。抽象类意味着类之间的一些更强大的关系,可能还有实现的一些共性。

当我们希望尽可能多地分离关注点时,应该使用接口(例如依赖注入)

应该使用抽象类对域中存在强关系的公共对象族进行建模。


抽象类不能实例化,但可以包含代码,而接口只包含方法定义,但不包含任何代码。您需要实现接口中定义的所有方法。

如果您的逻辑对于所有派生类都是相同的,那么最好使用抽象类而不是接口。

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