众所周知,C#和Java一样,都是面向对象的程序设计,并且为诸如封装,抽象,继承和多态性等面向对象的概念提供全面支持。 与抽象相反,抽象类和接口都以图片形式出现,因为它们都在C#程序中提供了抽象。
在抽象类中,我们可以创建需要由派生类实现的功能。接口允许我们定义一个或多个功能,但不能实现。派生类扩展接口并实现这些函数。
以下是抽象类和接口之间的重要区别。
序号 | 键 | 抽象类 | 接口 |
---|---|---|---|
1 | 定义 | 就标准定义而言,抽象类从概念上讲是无法实例化的类,通常实现为具有一个或多个纯虚(抽象)函数的类。 | 另一方面,接口是对继承该接口的类必须实现哪些成员函数的描述。换句话说,一个接口描述了类的行为。 |
2 | 实现 | 像C#中的其他常规类设计一样,抽象类也具有自己的实现及其声明。 | 另一方面,接口只能具有签名,而不能具有实现。由实现它的类提供实现。 |
3 | 继承 | 按照C#中的规范,一个类只能扩展一个其他类,因此抽象类不能实现多重继承。 | 另一方面,在接口的情况下,一个类可以实现多个接口,因此可以通过接口实现多重继承。 |
4 | 构造函数 | 像C#中用于实例化的其他类一样,抽象类也具有构造函数,该构造函数提供抽象类的实例以访问其非静态方法。 | 另一方面,Interface没有构造函数,因此尽管可以通过创建实现该接口的类的实例来访问其方法,但是我们无法直接实例化该接口。 |
5 | 修饰符 | 由于抽象类最类似于C#中的其他普通类,因此它可以包含不同类型的访问修饰符,例如public,private,protected等。 | 另一方面,由于需要实现Interface以便通过其他类提供其方法实现,因此只能包含public访问修饰符。 |
6 | 性能 | 由于抽象类有它的方法和它们的实现,它的抽象方法实现也有参考,所以性能比接口快。 | 另一方面,接口的性能很慢,因为它需要时间来搜索相应类中的实际方法。 |