C#中抽象类和接口的区别

时间:2015-02-28 09:50:05

标签: c# oop

这篇文章说 Codeproject 抽象类 - 可以有方法声明和方法定义。

但是这篇文章说 programcall 摘要 - 只能有方法声明。

我很困惑。任何人都可以清楚我两者的确切区别是什么?

3 个答案:

答案 0 :(得分:3)

请参阅此article

  

多重继承

一个类可以继承几个接口。

一个类只能继承一个抽象类。

  

默认实施

接口不能提供任何代码,只能提供签名。

抽象类可以提供完整的默认代码和/或只需要覆盖的详细信息。

  

访问Modfiers

接口不能具有子,函数,属性等的访问修饰符。一切都假设为公共抽象类可以包含子,函数,属性的访问修饰符 核心VS外围设备

接口用于定义类的外围功能。换句话说,Human和Vehicle都可以从IMovable接口继承。

抽象类定义类的核心标识,并在那里用于相同类型的对象。

  

同质

如果各种实现只共享方法签名,那么最好使用Interfaces。

如果各种实现属于同一类并且使用共同的行为或状态,则最好使用抽象类。

  

添加功能(版本控制)

如果我们向接口添加一个新方法,那么我们必须跟踪接口的所有实现并定义新方法的实现。

如果我们向抽象类添加一个新方法,那么我们可以选择提供默认实现,因此所有现有代码都可以正常工作。

字段和常量接口中不能定义任何字段抽象类可以定义字段和约束

答案 1 :(得分:0)

据我所知,抽象类已经可以实现一些方法或变量的值,只要它不实现它们 all (这将使它成为正常的课程)。 界面不能这样做;它只能提供方法和变量存根。

答案 2 :(得分:0)

接口更多是契约 - 它详细说明了在实现它的对象上找到的方法或属性。

抽象类是一个基础对象 - 它可以包含方法,变量和行为 - 但是你不能创建它的具体实现 - 你必须从它继承并扩展它的行为。