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

来源:百度知道 编辑:UC知道 时间:2024/05/16 03:58:47
抽象类单继承,接口支持多继承,抽象类可以继承实体类,但接口无法继承实体类,接口可以用于支持回调;抽象类不能实现回调,因为继承不支持,接口可以作用于值类型和引用类型;抽象类只能作用于引用类型。例如,结构就可以继承接口,而不能继承类

这是个面试题,标准答案太长改了改 高手看下这样回答对吗?

1.抽象类(abstract class)
抽象类是一种特殊的类,有如下的特点:
.抽象方法制作声明,不包含具体的实现,可以看做是没有重写的虚方法.
.抽象类不能被实例化.具有其他类相同的特性.
.抽象类可以没有抽象方法和抽象属性,但是一旦有了抽象方法,就一定要把这个类声明为抽象类.
.具体派生类必须要覆盖基类的抽象方法.
.抽象类可以派生自另一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果覆盖,则其他派生类也必须覆盖他们.
2.接口(interface)
接口是引用类型的,类似抽象类但又不同于抽象类.
.不能被实例化.
.只能包含实现的方法声明.
.成员可以包括方法,属性,索引器和事件.
.接口中不能包含常量,字段(域),构造函数,析构函数或者静态成员.
.接口中的所有成员默认为是public,因此接口中不能有private修饰符.
.派生类必须实现接口中的所有成员.
.一个类可以直接实现多个接口,接口之中用逗号隔开.
.一个接口可以有多个父接口,实现该接口的类必须实现所有接口中的所有成员.

接口回调实现多态,但是很显然抽象类也可以回调,有时候用抽象类反而更简洁

~我发现面试都喜欢这样的题目...

我不认为继承抽象就不能实现CALLBACK...只不过意义不大...应该

但抽象和接口确实不是一个概念...首先完全抽象和假的抽象(都实现了,就个抽象的框)~怎么说也都是类...实现的抽象方法是OVERRIDER~
而接口不是类啊....协议或者规则嘛...(所以你说接口能作用值和引用不是完全正确)

其实面试官问这样的问题...只是希望你回答 单 或者 多 ~就可以了...(这个个人认为)
感觉高明的面试官不会问这种问题...问这种问题就像"公版"题罢了...点个点就好了...说得太麻烦了...就怕把面试的人弄晕了~

思路很清晰