码迷,mamicode.com
首页 > Windows程序 > 详细

C# 接口和抽象类的区别

时间:2017-07-06 10:15:48      阅读:344      评论:0      收藏:0      [点我收藏+]

标签:c#   事件   访问   区别   回调   设计模式   包含   方法   相同   

这个问题基本上可以说是 面试时的必问问题

 

C# 中的接口和抽象类

相同点:

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

2. 都是面向抽象编程的技术基础,实现了诸多的设计模式

 

不同点: 

1. 接口支持多继承 (类可以继承任意多个接口),抽象类不能实现多继承 (一个类最多只能继承一个抽象类) (C#中不支持多继承)

2. 接口只能定义抽象规则; 抽象类既可以定义规则,还可以提供已经实现了的成员

3. 接口是一组行为规范;抽象类是一个不完全的类,着重族的概念

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

5. 接口只能包含方法,属性,索引器,事件的签名四种成员类型, 但是不能定义字段,不能包含已经实现的方法; 抽象类可以定义属性,也可以定义字段,包含已经实现了的方法

    抽象类中可以包含 字段,构造函数, 析构函数,静态成员,常量.  接口不可以

6. 接口可以作用于值类型和引用类型; 抽象类只能作用于引用类型。 比如 Struct就可以继承接口,但是不能继承类

7. 接口中的成员必须是公有的, 接口中包含的成员不带访问修饰符,所有接口成员都隐式规定为public的.

抽象类和子类是 "is-a"关系,而接口是不同类间共有的状态或行为的规范

一个类继承了某个抽象类,表示它 "是什么"

实现了某个接口表示它“有什么功能”或者“会做什么事”

eg: 燕子(具体类)是鸟(抽象类), 会飞(接口)。 C#中不支持多继承,即 燕子 只能是鸟,不会是其他东西了; 但它可以有多个功能,做很多事情,比如会飞( 接口 IFly), 会吃( 接口IEat)

8. 一个类或结构实现接口的原则是: 要么全要要么全不要。即所有在接口中定义的成员都必须在实现它的类或结构中实现.

 

C# 接口和抽象类的区别

标签:c#   事件   访问   区别   回调   设计模式   包含   方法   相同   

原文地址:http://www.cnblogs.com/wphl-27/p/7124334.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!