国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

C#中抽象類與接口的分析與比較

2013-01-29 08:35:12宿遷經(jīng)貿(mào)高等職業(yè)技術(shù)學校毛廣敏
電子世界 2013年10期
關(guān)鍵詞:基類實例聲明

宿遷經(jīng)貿(mào)高等職業(yè)技術(shù)學校 毛廣敏

C#中抽象類與接口的分析與比較

宿遷經(jīng)貿(mào)高等職業(yè)技術(shù)學校 毛廣敏

抽象類和接口是C#語言中兩個重要的對象引用類型,是C#程序設(shè)計使用多態(tài)性的基礎(chǔ),但也是初學者容易搞混淆的兩種類型,本文主要介紹了兩者的概念、特點和典型應(yīng)用實例,并對兩者進行比較。

抽象類;接口;分析;區(qū)別

抽象類和接口是C#語言中兩個重要的對象引用類型,是C#程序設(shè)計使用多態(tài)性的基礎(chǔ),但也是初學者容易搞混淆的兩種類型,本文主要介紹了兩者的概念、特點和典型應(yīng)用實例,并對兩者進行比較。通過本文的介紹能使得初學者掌握抽象類和接口概念、特點和使用場合。

一、抽象類

在類聲明中使用abstract修飾符的類稱為抽象類。含有一個或一個以上的抽象成員的類,必須定義為抽象類。當方法聲明包含abstract修飾符時,稱該方法為抽象方法,雖然抽象方法同時隱含為虛擬方法,但是它不能有virtual修飾符。聲明中包含abstract修飾的屬性稱為抽象屬性。抽象方法或?qū)傩詻]有方法體或?qū)傩栽L問器。抽象類只能是其他類的基類,抽象類不能實例化,必須在繼承中實現(xiàn)。抽象類中可以包含非抽象成員。抽象類的目的是提供一個合適的基類,以派生其他的類。使用抽象類的好處之一是,當要求組建新版本時,可根據(jù)需要將附加方法添加到基類。如下例:

抽象類應(yīng)用實例:

從上面的例子可以看出在程序中聲明了一個抽象類animal,在該類中聲明了一個抽象方法FoodHabits(),該方法沒有形參,無返回值。Carnivorous和Herbivorous是animal的派生類,在這兩個派生類中必須重寫FoodHabits()方法,否則會發(fā)生編譯錯誤,重寫方法的關(guān)鍵字是override。在主函數(shù)中不可以創(chuàng)建基類animal的實例,但可以將實現(xiàn)抽象類的對象賦給抽象類的對象。

二、接口

在C#中類只能實現(xiàn)“單一繼承”,要實現(xiàn)多重繼承,必須使用接口。一個接口定義一個協(xié)定,實現(xiàn)接口的類或結(jié)構(gòu)必須遵守其協(xié)定。接口可以從多個基接口繼承,而類或結(jié)構(gòu)可以實現(xiàn)多個接口中。接口聲明可以聲明零個或多個成員,接口的成員必須是方法、屬性、事件或索引器。接口不以包含常數(shù)、字段、運算符、實例構(gòu)造函數(shù)、析構(gòu)函數(shù)或類型,也不能包含任何種類的靜態(tài)成員。接口本身不提供它所定義的成員的實現(xiàn),接口只指定實現(xiàn)該接口的類或接口必須提供的成員。所有接口成員都隱式地具有public訪問權(quán)限。類可以從單個類繼承但可以實現(xiàn)多個接口,實現(xiàn)接口的類需要實現(xiàn)接口的所有成員。接口可以從現(xiàn)有接口中繼承,一個實現(xiàn)接口的類也實現(xiàn)它的繼承接口的基類接口。

雖然不能創(chuàng)建接口對象,但可以聲明接口變量,接口變量必須指向一個實現(xiàn)了接口的類的對象。如下例中的TypeUse[]t=new TypeUse[4];聲明了一個接口類型的數(shù)組,它包含4個接口類型的變量。以下語句聲明了類的對象,并實例化,接口變量(接口數(shù)組元素)指向類的對象。

以上語句說明不同類型的對象被分配給一個接口引用。以下程序中應(yīng)用程序通過接口引用數(shù)組調(diào)用Showinfo方法,并返回結(jié)果,在Showinfo方法中引用Type屬性和調(diào)用TellAboutSelf方法,不同對象及其屬性、方法關(guān)聯(lián)在一起,因此,在引用Type屬性和調(diào)用TellAboutSelf方法時,不必考慮是哪一個對象,這也是多態(tài)行為的典型示例。

三、接口實現(xiàn)“多重繼承”

四、抽象類和接口的比較

從上面兩個關(guān)于抽象類和接口的例子中可以看出抽象類和接口相似的地方和區(qū)別。

(一)相同點

1.抽象類和接口都包含可以由派生類繼承的成員,兩者都不能直接實例化。

2.兩者都可以被繼承。3.兩者都不能被實例化。4.都可以包含方法聲明。

5.派生類必須實現(xiàn)未實現(xiàn)的方法。

(二)區(qū)別

1.類是對對象的抽象,可以把抽象類理解為把類當作對象,抽象成的類叫做抽象類。而接口只是一個行為的規(guī)范或規(guī)定。

2.抽象類是一種不能實例化而必須從中繼承的類。抽象類可封裝繼承類的通用不變的功能,但也可通過實現(xiàn)抽象類的抽象方法和屬性為繼承類提供其不同的功能。在抽象類中可以包含非抽象成員。接口是完全抽象成員集合,可以被看作是為操作定合同。如果類實現(xiàn)了一個接口,必須實現(xiàn)接口把定義的所有成員。

3.抽象類的派生類也必須重寫抽象類中的抽象方法或?qū)傩?。抽象類中的成員沒有限制,但接口中的成員必須是方法、屬性、事件或索引器。所有接口的成員都是隱式具有public訪問權(quán)限,并且不能顯式的聲明接口成員的訪問權(quán)限,而抽象的成員的訪問權(quán)限需指定。

五、抽象類和接口的使用場合

1.如果預計要創(chuàng)建組件的多個版本,則創(chuàng)建抽象類。抽象類提供簡單的方法來控制組件版本。

2.如果創(chuàng)建的功能將在大范圍的全異對象間使用,則使用接口。如果要設(shè)計小而簡練的功能塊,則使用接口。

3.如果要設(shè)計大的功能單元,則使用抽象類,如果要在組件的所有實現(xiàn)間提供通用的已實現(xiàn)功能,則使用抽象類。

4.抽象類主要用于關(guān)系密切的對象,而接口適合為不相關(guān)的類提供通用功能。

本文通過對抽象類和接口概念、特點、典型應(yīng)用實例、比較分析及使用場合的介紹,相信能對初學者有所幫助。

[1]陳銳.C#程序設(shè)計(高等學校計算機科學與技術(shù)教材)[M].2012.

[2]杜少杰,王文紅.C#程序設(shè)計案例教材[M].2010.

[3]胡湘萍.C#中接口與抽象類的應(yīng)用辨析[J].2010.

毛廣敏(1978—),女,江蘇沭陽人,宿遷經(jīng)貿(mào)高等職業(yè)技術(shù)學校講師。

猜你喜歡
基類實例聲明
本刊聲明
本刊聲明
中國德育(2022年12期)2022-08-22 06:16:46
基于C#面向?qū)ο蟪绦蛟O(shè)計的封裝、繼承和多態(tài)分析
本刊聲明
本刊聲明
空戰(zhàn)游戲設(shè)計實例
一種基于用戶興趣的STC改進算法
服裝學報(2015年1期)2015-10-21 01:20:30
虛機制在《面向?qū)ο蟪绦蛟O(shè)計C++》中的教學方法研究
完形填空Ⅱ
完形填空Ⅰ
澄江县| 扶沟县| 廉江市| 原阳县| 河曲县| 德令哈市| 新兴县| 包头市| 鹿邑县| 咸阳市| 吉水县| 陆川县| 曲麻莱县| 深泽县| 普陀区| 通辽市| 连南| 广饶县| 水城县| 自治县| 贞丰县| 会泽县| 阿坝县| 漳平市| 五大连池市| 凯里市| 灵宝市| 静安区| 越西县| 万年县| 德令哈市| 荆门市| 吴堡县| 汝城县| 东城区| 文成县| 桂阳县| 湄潭县| 建始县| 日照市| 长宁区|