C#中的抽象类和接口
抽象类看起来很像一个接口,但这个概念对于OOP的初学者来说有点混乱。从概念上讲,抽象类看起来就像一个接口,当然,没有任何实现,但是它们有相当大的差异。虽然抽象类可以部分或完全实现,但必须完全实现接口。嗯,两者之间最显着的区别是抽象类可以有默认实现,而接口只是包含成员声明的方法的定义。让我们详细讨论两者的理论方面。
什么是抽象类?
抽象类是一种特殊类型的类,它充当其他类的基础,无法实例化。抽象类的实现逻辑由其派生类提供。为了使类抽象,使用“抽象”修饰符,这意味着需要在从它派生的类中实现一些缺少的实现。它包含抽象和非抽象成员。抽象类旨在提供可由多个派生类进一步共享和覆盖的基本功能。避免任何类型的代码重复很有用。它们看起来非常像接口,但具有附加功能。
什么是界面?
另一方面,接口不是仅包含功能签名的类。这是一种没有实施的模式。从概念上讲,它只是仅包含成员声明的方法的定义。它是一个空壳,不包含其成员的实现。它就像一个抽象基类,只包含抽象成员,如方法,事件,索引器,属性等。它不能直接实例化,其成员可以由任何类实现。另外,一个类可以实现多个接口,但是,类只能继承一个类。
抽象类与接口:C#中抽象类和接口之间的区别
- 多重继承 - 类只能使用一个抽象类,因此不支持多重继承。另一方面,接口可以支持多继承,这意味着类可以继承任意数量的继承。
- 定义 的 C#中的抽象类和接口 - 抽象类是一种特殊类型的类,它可能包含没有实现的定义。实现逻辑由其派生类提供。它可以有抽象方法和非抽象方法。另一方面,界面只是一种无法做任何事情的模式。从技术上讲,它只是一个空壳。
- 履行 - 抽象类可以包含定义及其实现。这是一个不完整的类,无法实例化。接口只能具有功能的签名而无需任何代码。
- 访问修饰符 - 抽象类可以有多个访问修饰符,例如subs,函数,属性等,而不允许接口具有访问修饰符,并且所有方法都必须隐式定义为public。
- 同质性 - 抽象类用于相同类型,行为和状态的实现,而接口用于仅共享方法签名的实现。
- 宣言 - 抽象类充当所有其他类的基类,因此它可以声明或使用任何变量,而不允许接口声明任何变量。
- 构造函数声明 - 虽然抽象类可以具有构造函数声明,但接口不能具有构造函数声明。
- 核心与外围 - 抽象类用于定义类的核心标识,可用于相同数据类型的对象。另一方面,接口用于定义类的外围能力。
- 刚性与柔软 - 抽象类在功能方面更加柔顺,至少从开发人员的角度来看,而界面更加严格。
抽象类与接口:表格形式
摘要
抽象类和接口有什么区别?这可能是任何技术访谈中提出的最常见问题之一。您可能会在任何C#教程中找到关于抽象类和接口的大量信息,但是,了解两者之间的差异是非常困难的部分。您可以整合所有可以找到但仍然无法获得的信息。好吧,从概念上讲,两者都是编程中最重要的术语,并且完全相同,但是,它们在功能方面有很大不同。虽然抽象类是一种特殊类型的类,它充当其他类的基础,但另一方面,接口只是一个只有成员声明的空壳。