C#中 abstract class 和 interface 什么区别?

相同点:

都不能被直接实例化,都可以通过继承的方式实现其抽象方法

不同点:

1. 接口支持多继承;抽象类不能实现多继承。

 例如:一个类可以继承多个接口,但只能继承一个类,且继承的类必须写在最前面

2. 接口只能定义行为;抽象类既可以定义行为,还可能提供实现。

3. 接口可以用于支持回调(CallBack);抽象类不能实现回调,因为继承不支持。

    注:要实现回调,首先创建一个回调对象,然后在创建一个控制对象。被调用方法的对象称为回调对象

 控制器对象负责检查某个场景是否出现或某个条件是否满足.当此场景出现或此条件满足时,自动调用回调对象的方法

4. 接口只包含方法(Method)、属性(Property)、索引器(Index)、事件(Event)的签名,但不能定义字段和包含实现的方法

5. 抽象类可以定义字段、属性、包含有实现的方法。

6. 接口可以作用于值类型(Struct)和引用类型(Class);抽象类只能作用于引用类型。例如,Struct 就可以继承接口,而不能继承类。

posted @ 2022-05-07 16:31  小_周  阅读(163)  评论(0)    收藏  举报