C#接口的研析

时间:2022-09-18 08:55:58

摘要:在C#的开发中,接口是非常重要也非常好用的东西。可是很多人却不是很了解接口的作用及使用方法,该文以深入浅出的方式给大家进行接口的讲解,并通过两个典型的案例给大家介绍IComparable、IComparer这两接口的典型应用。

关键词:C#;类;接口;IComparable接口;IComparer接口

中图分类号:TP312文献标识码:A文章编号:1009-3044(2010)03-624-02

C# Interface Research and Analysis

DONG Tao-Li, MA Zhan-feng

(Vocational and Technical College Hanzhong, Hanzhong 723000, China)

Abstract: In the C# development, the interface is very important and very nice things. But many people who are well aware of the role of the interface and the use of methods, In this paper, in simple terms means to you to explain the interface And through two typical cases to introduce IComparable 、IComparer typical application of these two interfaces.

Key words: C#; class; interface; IComparable interface; IComparer interface

在介绍接口之前首先给大家把C#中的一些基本概念简单阐述一下:

C#("C sharp"):C#是微软公司的一种面向对象的运行于.NET Framework之上的高级程序设计语言,它是微软公司的最新成果。C#是一种安全的、稳定的、简单的,由C和C++衍生出来的面向对象的编程语言,它在继承C和C++强大功能的同时去掉了一些它们的复杂特性。C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。

类:类是C#类型中最基础的类型。类是一个数据结构,将字段和方法组合在一个单元中。类通过new关键字可以动态创建类实例(也就是对象)。

多态:多态是同一操作作用于不同的类的实例,不同的类将进行不同的解释,最后产生不同的执行结果,为了实现多态,我们引入了抽象类。

继承:继承是指一个类能分享其它类的特征和行为。继承必须满足单根性原则,也就是说,一个子类只能有一个父类。

抽象类:抽象类和接口是C#语言中两个重要的对象引用类型,是C#程序设计使用多态性的基础。抽象类可以实现类的多态,抽象类中的方法没有方法体代码,抽象类中的方法必须在它非抽象类的子类中实现;抽象类通过abstract修饰,它内部的抽象方法也是通过abstract修饰的,在其子类中现实时必须用override修饰。

1 接口

接口提供了一组规范,一个标准。我们都知道,如果一个子类可以继承父类的方法,就可以实现父类方法的功能。例如:B类继承A类,他就可以继承A类中的非私有的方法和属性;由于C#中继承的单根性,所以C#中继承不允许多重继承,假如这个子类(B类)要实现另外一个类C类中的方法,显然通过继承是没法实现的,因为B类已经有A类这个父类了我们就不能再将C类设置为它的父类,因为我们的继承必须满足单根性;像这种情况应怎么办呢?通过接口,接口技术可以让类实现这种功能,因为在C#中一个类是可以实现多个接口的。

接口优势简介:

接口是对集成单根性的扩展。如上述B类继承A类他就可以继承A类中的非私有的方法和属性;假如这个子类(B类)要实现另外一个类C类中的方法,显然通过继承是没法实现的,我们知道一个类可以实现多个接口,因此我们可以将C类中的方法放到接口里不就可以实现了。

接口是一种规范和标准。一个类如果实现了一个接口,意味着这个类遵循了某种规范和约定。其它类可以通过这些规范和约定与他通信。

接口屏蔽了实现的细节。接口可以让接口的使用者不必关心接口的实现者是如何实现接口的,例如:计算机不必关心USB鼠标的内部结构,只需要知道这个鼠标遵循USB接口标准,就可以正常的使用它了。同样在程序中,一个类如果实现了IComparable接口。便可以让这个类的对象进行排序。

接口的使用方便团队协作开发。例如一个系统,加入要实现对象的排序功能,实现接口的人专门实现接口,而做排序功能的人专门做排序就可以了,如果一个系统都能够做到这种设计,便可以更方便地开发团队进行分工明确的协作开发。

接口成员的定义和类成员的定义类似,但有几个重要区别:

1) 方法不允许使用修饰符(public、private、protected或internal),因为所有的接口成员都是公共的;

2) 接口成员不能包括代码体;

3) 接口不能定义字段成员,成员不能用关键字static、virtal、abstract或sealed来定义;

4) 接口的所有方法在实现它的类中都必须重写。

接口是对继承单根性的扩展,接口使用方法与继承一个类相似。接下来我们看两个典型的接口案例,通过这两个案例使大家更好的理解接口。

2 泛型接口IComparable的介绍及典型应用

类通过实现多个接口,可以说变相地实现了类的多重继承,一个类如果实现了IComparable接口,我们就可以让这个类的对象进行排序,但是我们知道通过实现IComparable接口的CompareTo()方法时,要对当前实例和另一个参数传进来的实例作比较,这个方法的参数是object类型,所以要将它转换为当前的实例类型:Student other = obj as Student,这样的显式类型转换,不容易控制,容易出错。

大家都知道泛型集合对于类型的约束非常严谨,在访问他时也无需类型转换,那么能不能使用泛型呢?答案是肯定的,IComparable接口,这个接口就是IComparable接口的泛型版本,IComparable接口是一个泛型接口,他和IComparable接口的功能是一样的,实现这个泛型接口的类同样支持排序。IComparable接口对于比较对象的类型有严格的约束,如果Student类实现了IComparable接口,就只允许比较Student类型的对象,同样也不需要类型转换,通过下面表格中代码的比较相信大家对这两个接口就更易理解了。可以看到,实现了IComparable接口后,CompareTo()方法必须传递Student对象,在比较大小时也无需类型转换这样定义对于类型的控制更加严格,增强了系统的安全性,代码也变得非常简洁。

3泛型接口IComparer 的介绍及典型应用

通过上边泛型接口IComparable的介绍,大家已经知道了这个类实现了IComparable接口或者IComparable接口,在集合中它的对象就可以使用集合中的默认排序方法即sort()方法,但是这个默认的排序方式,是在实现接口的比较方法时指定的,也就是说它的排序方式一开始就确定了,如果你想按照其它的方式排序,就必须重新实现CompareTo()方法。那么有没有更简单的实现方法呢,答案是肯定的,那就是IComparer接口,俗称比较器,这个泛型接口,他有一个为实现的方法 int Compare(Student x, Student y),它用于比较两个对象的大小,按照指定的方式比较大小,然后传入sort()方法,就能实现这宗比较方式的排序。

程序的实现思路是这样的:

1) 在测试程序中定义反省集合List

2) 为每个按钮提供一个排序方法,排序方法调用相应的sort()方法

3) 为每种排序方式丝线一个相应的比较器,为了方便我们将所有的比较器都放在一个类中

4) 将实现的比较器传递给sort()方法

5) 实现排序

通过上文简单扼要的阐述,相信大家对C#中IComparer、IComparable这两个典型而实用的接口已有一个更深的了解。

4 结束语

通过上文的阐述,相信您应该对C#面向对象编程中的接口及IComparable、IComparable这两典型的泛型接口有了更清晰更准确的理解。在C#这个高雅的殿堂里,有着各种各样璀璨的明珠,这个让人叹为观止的技术和思想导致了Web开发领域发生了天翻地覆的变化。千里之行始于足下,用脚踏实地的态度,将这些知识点一个一个拿下,相信你就是明天的Anders Hejlsberg。

参考文献:

[1] Watson K.C#入门经典[M].齐立波,译.北京:清华大学出版社,2006.

[2] Robinson S,Nagel C.C#高级编程[M].李敏波,译.3版.北京:清华大学出版社,2005.

[3] Schildt H.C#编程序起步[M].长春亿特,译.北京:人民邮电出版社,2006.

[4] Hejlsberg A,Wiltamuth S,Golde P. C#编程语言详解[M].张晓坤,谭立平,车树良,译.北京:电子工业出版社,2004.

[5] 美国微软公司.Visual C# 2005软件的帮助信息[Z].2005.

[6] 李兰友,杨晓光.Visual C#.NET程序设计[M].北京:北方交通大学出版社,2004.

[7] 王昊亮,李刚.Visual C#程序设计教程[M].北京:清华大学出版社,2003.

[8] 佟伟光.Visual 实用教程[M].北京:电子工业出版社,2003.

上一篇:基于水印加密技术的在线交互系统安全日志的设... 下一篇:基于RTF格式的试题库技术研究