`
devgis
  • 浏览: 133090 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

C#基础之抽象类和接口的区别

 
阅读更多

一、抽象类

抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。

二、接口

接口是引用类型的,类似于类,和抽象类的相似之处有三点:

1、不能实例化;

2、包含未实现的方法声明;

3、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员);

另外,接口有如下特性:

接口除了可以包含方法之外,还可以包含属性、索引器、事件,而且这些成员都被定义为公有的。除此之外,不能包含任何其他的成员,例如:常量、域、构造函数、析构函数、静态成员。一个类可以直接继承多个接口,但只能直接继承一个类(包括抽象类)。

三、抽象类和接口的区别

1.类是对对象的抽象,可以把抽象类理解为把类当作对象,抽象成的类叫做抽象类.而接口只是一个行为的规范或规定,微软的自定义接口总是后带able字段,证明其是表述一类类“我能做。。。”.抽象类更多的是定义在一系列紧密相关的类间,而接口大多数是关系疏松但都实现某一功能的类中.

2.接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法;

3.一个类一次可以实现若干个接口,但是只能扩展一个父类

4.接口可以用于支持回调,而继承并不具备这个特点.

5.抽象类不能被密封。

6.抽象类实现的具体方法默认为虚的,但实现接口的类中的接口方法却默认为非虚的,当然您也可以声明为虚的.

7.(接口)与非抽象类类似,抽象类也必须为在该类的基类列表中列出的接口的所有成员提供它自己的实现。但是,允许抽象类将接口方法映射到抽象方法上。

8.抽象类实现了oop中的一个原则,把可变的与不可变的分离。抽象类和接口就是定义为不可变的,而把可变的座位子类去实现。

9.好的接口定义应该是具有专一功能性的,而不是多功能的,否则造成接口污染。如果一个类只是实现了这个接口的中一个功能,而不得不去实现接口中的其他方法,就叫接口污染。

10.尽量避免使用继承来实现组建功能,而是使用黑箱复用,即对象组合。因为继承的层次增多,造成最直接的后果就是当你调用这个类群中某一类,就必须把他们全部加载到栈中!后果可想而知.(结合堆栈原理理解)。

同时,有心的朋友可以留意到微软在构建一个类时,很多时候用到了对象组合的方法。比如 asp.net中,Page类,有Server Request等属性,但其实他们都是某个类的对象。使用Page类的这个对象来调用另外的类的方法和属性,这个是非常基本的一个设计原则。

11.如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法.

四、抽象类和接口的使用

1. 如果预计要创建组件的多个版本,则创建抽象类。抽象类提供简单的方法来控制组件版本。

2.如果创建的功能将在大范围的全异对象间使用,则使用接口。如果要设计小而简练的功能块,则使用接口。

3.如果要设计大的功能单元,则使用抽象类.如果要在组件的所有实现间提供通用的已实现功能,则使用抽象类。

4.抽象类主要用于关系密切的对象;而接口适合为不相关的类提供通用功能。

希望通过本文的介绍,能给大家得来帮助。

分享到:
评论

相关推荐

    C#期末总复习 C#语言基础和程序结构 数据类型:数组、结构和枚举 运算符、表达式和结构化程序 类的构造方法,继承,接口和抽象类 委托与事件 WindowsForm应用程序 XML操作等

    C# C#语言基础和程序结构 数据类型:数组、结构和枚举 运算符、表达式和结构化程序 类的构造方法,继承,接口和抽象类 委托与事件 WindowsForm应用程序 XML操作等

    c#基础学习问答c#基础学习问答

    18.抽象类和接口的区别? 19.别名指示符是什么? 20.如何释放非托管资源? 21.P/Invoke是什么? 22.StringBuilder 和 String 的区别? 23.explicit 和 implicit 的含义? 24.params 有什么用? 25.什么是反射?

    C#基础概念.doc

    18、抽象类和接口的区别? 19、别名指示符是什么? 20、如何释放非托管资源? 21、P/Invoke是什么? 22、StringBuilder 和 String 的区别? 23、explicit 和 implicit 的含义? 24、params 有什么用? 25、什么是...

    C#编程从基础到实践

    第3部分引入C#编程的接口、文件和流操作的相关内容,包括接口定义与实现、抽象类与接13、文件读写和流的操作。第4部分开始介绍C#网络编程基础,内容包括网络通信量的监视、TCP和UDP编程简介、DNS的使用和套接字编程...

    C#基础考题(有答案)

    整理的一些c#基础复习题(含答案)包含以下目录内容的题目 1.枚举类型  2.结构体  3.访问修饰符  4.类和对象  5.字段和属性  6.方法和参数  7.值类型和引用类型  8....抽象类和虚方法  13. 接口 

    你必须知道的C#的25个基础概念(附源码)

    抽象类和接口的区别? 19.别名指示符是什么? 20.如何释放非托管资源? 21.P/Invoke是什么? 22.StringBuilder 和 String 的区别? 23.explicit 和 implicit 的含义? 24.params 有什么用? 25.什么是反射? 以下是...

    C# 语言类的基础知识 程序集 域名

    适合c# 初学者 类的基础知识 程序集 域名 接口 抽象类 及类方面的容易混淆的关键字

    C#基础概念二十五问

    18.抽象类和接口的区别? 19.别名指示符是什么? 20.如何手工释放资源? 21.P/Invoke是什么? 22.StringBuilder 和 String 的区别? 23.explicit 和 implicit 的含义? 24.params 有什么用? 25.什么是反射?

    接口基础知识

    一个类如果实现了一个接口,则必须实现接口中的全部方法,否则必须将其定义为抽象类。Java通过实现接口达到了多重继承的效果 3. 接口表示一种约定,接口表示一种能力。接口体现了约定和实现分离的原则。 4. 抽象类...

    C#开发技术源代码大全

    09 抽象类和接口 10 数组与集合 11 代理和事件 12 Windows应用程序概述 13 Visual Studio 控件介绍 14 列表选择控件介绍 15 数据显示控件 16 通用对话框 17 其他常用控件 18 Windows应用程序的...

    C#编程兵书(完整扫描版 )pdf格式 电子书

    第4章 双管齐下:抽象类和接口 第5章 无懈可击:调试异常与编码标准 第6章 添砖加瓦:字符、字符串 处理与正则表达式 第7章 兵分两路:数组与集合 第8章 双龙出海:代理和事件 第3篇 Windows程序编程 第9章 以逸待劳...

    C#开发技术大全(源码)

    09 抽象类和接口 10 数组与集合 11 代理和事件 12 Windows应用程序概述 13 Visual Studio 2008 控件介绍 14 列表选择控件介绍 15 数据显示控件 16 通用对话框 17 其他常用控件 18 Windows应用程序...

    C#基础学习

    C# 基础 加强 泛型、委托、事件 及其使用、接口和抽象类、Lambda 和 LINQ M V C .NET CORE

    第一个C#程序Hello World

    比如,它的代理事件模式是一种非常搞的设计概念东西,本人觉得它:接口不象接口,抽象类不象抽象类的,搞了一种什么来自于Callback的概念--唉,无语。。。 总结:如果你能看代码逻辑,那么表示你的C#学得不错,只...

    《Visual C# 2008开发技术大全》配书光盘

    09 抽象类和接口 10 数组与集合 11 代理和事件 12 Windows应用程序概述 13 Visual Studio 2008 控件介绍 14 列表选择控件介绍 15 数据显示控件 16 通用对话框 17 其他常用控件 18 Windows应用程序...

    C#重要基础

    C#面向对象重要基础,代码通俗易懂.快速提高基本技术.

    鹏哥特色教程之C#入门到精通 基础篇 2/2

    鹏哥特色教程之C#入门到精通-eNet网络...29.抽象类 30.访问限制关键字 31.所有的类的父类 32.委托 33.事件 34.枚举 35.结构体 36.this关键字 37.base关键字 38.值类型 39.引用类型 40.装箱和拆箱 41.丢人的自我介绍

    C#和Labview资料

    … 95.3 结构和类 ……………………·9现继承 ¨¨…………………%.1 虚方法………………………·97.2 隐藏方法……………………·98.3 调用函数的基类版本 ………·994.2.4 抽象类和抽象函数 ……∷·△004,2,5 ...

Global site tag (gtag.js) - Google Analytics