摘要:在C#的開發中,接口是非常重要也非常好用的東西。可是很多人卻不是很了解接口的作用及使用方法,該文以深入淺出的方式給大家進行接口的講解,并通過兩個典型的案例給大家介紹IComparable
關鍵詞:C#;類;接口;IComparable
中圖分類號: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
Key words: C#; class; interface; IComparable
在介紹接口之前首先給大家把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
3泛型接口IComparer
通過上邊泛型接口IComparable
程序的實現思路是這樣的:
1) 在測試程序中定義反省集合List
2) 為每個按鈕提供一個排序方法,排序方法調用相應的sort()方法
3) 為每種排序方式絲線一個相應的比較器,為了方便我們將所有的比較器都放在一個類中
4) 將實現的比較器傳遞給sort()方法
5) 實現排序
通過上文簡單扼要的闡述,相信大家對C#中IComparer
4 結束語
通過上文的闡述,相信您應該對C#面向對象編程中的接口及IComparable
參考文獻:
[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 Basic.NET實用教程[M].北京:電子工業出版社,2003.