c#中的抽象类和接口

来源:互联网 发布:win7网络红叉不能上网 编辑:程序博客网 时间:2024/05/21 10:13

在本文中,我宁可相信二者是同时出现的,是设计者在高级程序语言设计的初始阶段就设计出来的两个巧妙的功能(我这样说,当然还包括了这种想法:设计者也考虑到了二者的区别),而不是设计者在时间进程中逐个加进来的一个个功能块(是同时出现的,还是逐个出现,目前对于我确是未知)。

c#中可以多继承接口,却只能继承自一个抽象类;

抽象类中的方法可以包含一些实现,但接口却只能定义方法的一种规范,不能包含实现;

继承类必须实现借口中所有的方法,而不一定要实现抽象类中的所有方法;

抽象类可以继承自抽象类 ,但接口不能继承自接口;

派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员);另外,接口有如下特性:
接口除了可以包含方法之外,还可以包含属性、索引器、事件,而且这些成员都被定义为公有的。除此之外,不能包含任何其他的成员,例如:常量、域、构造函数、析构函数、静态成员。

二者均不能实例化。关于二者的使用情况的理解,下面这段话是最好的解释:

抽象类用于部分实现一个类,再由用户按需求对其进行不同的扩展和完善;接口只是定义一个行为的规范或规定。
抽象类在组件的所有实现间提供通用的已实现功能;接口创建在大范围全异对象间使用的功能。
抽象类主要用于关系密切的对象;而接口适合为不相关的类提供通用功能。
抽象类主要用于设计大的功能单元;而接口用于设计小而简练的功能块。

例如:
Window窗体可以用抽象类来设计,可以把公有操作和属性放到一个抽象类里,让窗体和对话框继承自这个抽象类,再根据自己的需求进行扩展和完善。
打印操作可以作为一个接口提供给每个需要此功能的窗体,因为窗体的内容不同,就要根据他们自己的要求去实现自己的打印功能。打印时只通过接口来调用,而不用在乎是那个窗体要打印。

原创粉丝点击