C#程序設(shè)計教程第5章.ppt_第1頁
C#程序設(shè)計教程第5章.ppt_第2頁
C#程序設(shè)計教程第5章.ppt_第3頁
C#程序設(shè)計教程第5章.ppt_第4頁
C#程序設(shè)計教程第5章.ppt_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、2020/7/31,1,C#程序設(shè)計經(jīng)典教程,第五章 面向?qū)ο蟮母呒壋绦蛟O(shè)計,1. 總體要求 掌握靜態(tài)類與靜態(tài)類成員的定義與使用。 理解類的繼承性與多態(tài)性,掌握其應(yīng)用方法。 理解抽象類、接口的概念,掌握抽象類與接口的定義及使用方法。 理解嵌套類、分部類和命名空間的概念,掌握嵌套類、分部類和命名空間的使用方法。 2. 相關(guān)知識點(diǎn) 熟悉C#的結(jié)構(gòu)、類、數(shù)組的區(qū)別。 熟悉類和類成員的定義與使用 熟悉方法的定義與使用等基本操作。,3. 學(xué)習(xí)重點(diǎn) 靜態(tài)成員與靜態(tài)類 類的繼承性與多態(tài)性 抽象類與接口定義與使用。 4. 學(xué)習(xí)難點(diǎn) 靜態(tài)成員的作用,靜態(tài)方法和實(shí)例方法的區(qū)別 多態(tài)的概念和實(shí)現(xiàn),虛方法和抽象方法的

2、區(qū)別 接口的作用和使用,抽象方法和接口的區(qū)別,第五章 面向?qū)ο蟮母呒壋绦蛟O(shè)計,第五章 面向?qū)ο蟮母呒壋绦蛟O(shè)計,主要內(nèi)容 5.1 靜態(tài)成員與靜態(tài)類 5.2 類的繼承性與多態(tài)性 5.3 抽象類與接口 5.4 嵌套類、分部類與命名空間,5.1 靜態(tài)成員與靜態(tài)類,5.1.1 靜態(tài)成員 5.1.2 靜態(tài)構(gòu)造函數(shù) 5.1.3 靜態(tài)類,返回,5.1.1 靜態(tài)成員,靜態(tài)成員通過static關(guān)鍵字來標(biāo)識,可以是靜態(tài)方法、字段、屬性或事件。 靜態(tài)成員與非靜態(tài)成員的不同在于:靜態(tài)成員屬于類,而不屬于類的實(shí)例,因此需要通過類而不是通過類的實(shí)例來訪問;而非靜態(tài)成員則總是與特定的實(shí)例(對象)相聯(lián)系。 在實(shí)際應(yīng)用中,當(dāng)類的

3、成員所引用或操作的信息是關(guān)于類而不是類的實(shí)例時,就應(yīng)該設(shè)置為靜態(tài)成員。例如,想統(tǒng)計同類對象的數(shù)量,就可使用靜態(tài)字段和靜態(tài)方法來實(shí)現(xiàn),5.1.1 靜態(tài)成員,【實(shí)例5-1】利用靜態(tài)成員統(tǒng)計人數(shù)。,5.1.2 靜態(tài)構(gòu)造函數(shù),類的構(gòu)造函數(shù)也可以是靜態(tài)的,靜態(tài)構(gòu)造函數(shù)不是為了創(chuàng)建對象而設(shè)計的,而是用來初始化類,只有非靜態(tài)的構(gòu)造函數(shù)才用來創(chuàng)建對象(用于創(chuàng)建對象的構(gòu)造函數(shù)稱為實(shí)例構(gòu)造函數(shù))。由于靜態(tài)構(gòu)造函數(shù)并不對類的特定實(shí)例進(jìn)行操作,所以也稱為全局或共享構(gòu)造函數(shù)。 在C#應(yīng)用程序中,不能直接調(diào)用靜態(tài)構(gòu)造函數(shù)。靜態(tài)構(gòu)造函數(shù)在類的第一個實(shí)例創(chuàng)建之前或者調(diào)用類的任何靜態(tài)方法之前執(zhí)行,而且最多執(zhí)行一次。因此,靜態(tài)構(gòu)

4、造函數(shù)適合于對類的靜態(tài)數(shù)據(jù)成員進(jìn)行初始化。,5.1.2 靜態(tài)構(gòu)造函數(shù),靜態(tài)構(gòu)造函數(shù)可以與實(shí)例構(gòu)造函數(shù)共存,其一般形式如下: static 靜態(tài)構(gòu)造函數(shù)名() /語句; 其中,靜態(tài)構(gòu)造函數(shù)名與類名相同,聲明靜態(tài)構(gòu)造函數(shù)時不能帶訪問修飾符(如public),并且不能有任何參數(shù)列表和返回值。,5.1.2 靜態(tài)構(gòu)造函數(shù),我們可以在【實(shí)例5-1】的基礎(chǔ)上增加一個靜態(tài)構(gòu)造函數(shù),結(jié)果就會不同,5.1.3 靜態(tài)類,靜態(tài)類使用static關(guān)鍵字來聲明,以指示它僅包含靜態(tài)成員,不能使用new關(guān)鍵字創(chuàng)建靜態(tài)類的實(shí)例。在實(shí)際應(yīng)用中,當(dāng)類中的成員不與特定對象關(guān)聯(lián)的時候,就可以把它創(chuàng)建為靜態(tài)類。 靜態(tài)類有下以特點(diǎn): (1

5、) 靜態(tài)類僅包含靜態(tài)成員; (2) 靜態(tài)類不能被實(shí)例化; (3) 靜態(tài)類是密封的; (4) 靜態(tài)類不能包含實(shí)例構(gòu)造函數(shù),5.1.3 靜態(tài)類,由于靜態(tài)類是密封的,因此不可被繼承。靜態(tài)類不能包含實(shí)例構(gòu)造函數(shù),但仍可聲明靜態(tài)構(gòu)造函數(shù),以分配初始值或設(shè)置某個靜態(tài)狀態(tài)。(關(guān)于密封和繼承將在下節(jié)進(jìn)行討論)。 靜態(tài)類的優(yōu)點(diǎn)如下: (1) 編譯器能夠自動執(zhí)行檢查,以確保不添加實(shí)例成員; (2) 靜態(tài)類能夠使程序的實(shí)現(xiàn)更簡單、迅速,因?yàn)椴槐貏?chuàng)建對象就能調(diào)用其方法。,5.2 類的繼承性與多態(tài)性,5.2.1 類的繼承性 5.2.2 類的多態(tài)性,返回,5.2.1 類的繼承性,當(dāng)一個類從另一個類派生出來時,派生類就具有

6、了基類中的所有成員,這樣,基類中定義這些成員的代碼,不需要在派生類定義中重寫,在派生類定義中,只需定義派生類自己的成員即可。這樣,既提高了代碼的重用性,從而提高了程序設(shè)計的效率,又提供了已有程序設(shè)計的可擴(kuò)展性。類的繼承為面向?qū)ο蟪绦蛟O(shè)計構(gòu)建一個分層類結(jié)構(gòu)體系創(chuàng)造了條件,而.NET框架類庫就是一個龐大的分層類結(jié)構(gòu)體系。其中Object類是一個最上層的基類,其他所有類都是直接或間接由Object類繼承而來的。即使用戶自定義的類沒有指定繼承關(guān)系,系統(tǒng)仍然將該類作為Object類的派生類。,5.2.1 類的繼承性,在C#中,類的繼承遵循以下原則: (1) 派生類只能從一個類中繼承,即單繼承。 (2)

7、派生類自然繼承基類的成員,但不能繼承基類的構(gòu)造函數(shù) (3) 類的繼承可以傳遞,例如:假設(shè)類C繼承于類B,類B又繼承類A,那么C類即具有類B和類A的成員,可以認(rèn)為類A是類C的祖先類。,5.2.1 類的繼承性,1派生類的聲明 在C#中,派生類可以擁有自己的成員,也可以隱式地從它的基類繼承所有成員,包括方法、字段、屬性和事件,但私有成員、構(gòu)造函數(shù)和析構(gòu)函數(shù)等除外。另外,派生類只能從一個類中繼承,即單繼承。 C#中聲明派生類的一般形式如下: 訪問修飾符 class 類名 :基類名 類的成員; ,5.2.1 類的繼承性,2構(gòu)造函數(shù)的調(diào)用 在C#中,派生類不能繼承其基類的構(gòu)造函數(shù),但是,在創(chuàng)建對象時,會調(diào)

8、用構(gòu)造函數(shù),為對象分配內(nèi)存并初始化對象的數(shù)據(jù)。創(chuàng)建派生類對象時,為完成其基類部份的成員初始化,會調(diào)用基類的構(gòu)造函數(shù)。其調(diào)用構(gòu)造函數(shù)的順序是先調(diào)用基類構(gòu)造函數(shù),再調(diào)用派生類的構(gòu)造函數(shù),以完成數(shù)據(jù)成員分配內(nèi)存空間并進(jìn)行初始化的工作。 類的繼承可以傳遞,例如:假設(shè)類C繼承于類B,類B又繼承類A,那么C類即具有類B和類A的成員,可以認(rèn)為類A是類C的祖先類。在這種情況下,構(gòu)造函數(shù)的調(diào)用次序按由高到低順序依次調(diào)用,即先調(diào)用A的構(gòu)造函數(shù),再調(diào)用B的構(gòu)造函數(shù)。最后調(diào)用C的構(gòu)造函數(shù)。,5.2.1 類的繼承性,【實(shí)例5-2】繼承中的構(gòu)造函數(shù)調(diào)用演示。,5.2.1 類的繼承性,如果把基類的構(gòu)造函數(shù)public An

9、imal()改為如下形式: public Animal(string name,int age) =name; this.age = age; 則編譯時如出現(xiàn)“Animal不包含采用0個參數(shù)的構(gòu)造函數(shù)”的錯誤,這是因?yàn)楫?dāng)創(chuàng)建派生類對象時,系統(tǒng)默認(rèn)調(diào)用基類的默認(rèn)構(gòu)造函數(shù)(即無參構(gòu)造函數(shù)),而當(dāng)基類沒有默認(rèn)構(gòu)造函數(shù)或想調(diào)用基類的帶參的構(gòu)造函數(shù)時,需要使用base關(guān)鍵字。其格式如下: public 派生類構(gòu)造函數(shù)名(形參列表):base(向基類構(gòu)造函數(shù)傳遞的形參列表),5.2.1 類的繼承性,【實(shí)例5-3】調(diào)用基類帶參構(gòu)造函數(shù)演示。,5.2.1 類的繼承性,3密封類 為了阻止一個類

10、的代碼被其他類繼承,可以使用密封類,因?yàn)樵?NET中,加載密封類時將對密封類的方法調(diào)用進(jìn)行優(yōu)化,因此使用密封類可以提高應(yīng)用程序的可靠性和性能。另外,軟件開發(fā)者通過使用密封類還可以把自己的知識產(chǎn)權(quán)保護(hù)起來,避免他人共享代碼。 在C#中,添加關(guān)鍵字sealed可以聲明密封類。,5.2.2 類的多態(tài)性,多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計的一個重要特征,多態(tài)的意思是一種事物有多種形態(tài)。 當(dāng)派生類從基類繼承時,它會獲得基類的所有方法、字段、屬性和事件。派生類允許擴(kuò)展基類的成員,也可以重寫基類的方法成員,以更改基類的數(shù)據(jù)和行為。為了使用派生類能更改基類的數(shù)據(jù)和行為,C#提供了兩種選擇:一是使用新的派生成員替換基成員

11、,二是重寫虛擬的基成員。 在C#中,基類對象可以引用派生類對象,但不允許派生類對象引用基類對象,這樣,一個基類對象名稱既可以指向基類對象,也可以指向派生對象。而當(dāng)基類對象執(zhí)行一個基類與派生類都具有的同名方法調(diào)用時,程序可以根據(jù)基類對象的類型不同(基類還是派生類)進(jìn)行正確的調(diào)用。,5.2.2 類的多態(tài)性,1使用new關(guān)鍵字重新定義類的成員 使用new關(guān)鍵字來定義與基類中同名的成員,即可替換基類的成員。如果基類定義了一個方法、字段或?qū)傩?,則new關(guān)鍵字用于在派生類中創(chuàng)建該方法、字段或?qū)傩缘男露x。new關(guān)鍵字應(yīng)放置在要替換的類成員的返回類型之前。 2用virtual和override關(guān)鍵字定義類成

12、員 基類中的聲明格式: public virtual 方法名稱(參數(shù)列表) 派生類的聲明格式: public override方法名稱(參數(shù)列表) 其中,基類與派生類中的方法名稱與參數(shù)列表必須完全一致。,5.2.2 類的多態(tài)性,【實(shí)例5-4】虛方法演示。,5.2.2 類的多態(tài)性,當(dāng)點(diǎn)擊“創(chuàng)建子類對象并調(diào)用方法”按鈕時,以子類對象做為實(shí)參,將調(diào)用子類的Eat方法,顯示結(jié)果會不同,5.2.2 類的多態(tài)性,使用virtual和override時要注意以下幾點(diǎn): (1) 字段不能是虛擬的,只有方法、屬性、事件和索引器才可以是虛擬的; (2) 使用virtual修飾符后,不允許再使用static、abs

13、tract或override修飾符; (3) 派生類對象即使被強(qiáng)制轉(zhuǎn)換為基類對象,所引用的仍然是派生類的成員; (4) 派生類可以通過密封來停止虛擬繼承,此時派生類的成員使用sealed override聲明。,5.2.2 類的多態(tài)性,3調(diào)用基類方法 當(dāng)派生類重載或覆蓋基類方法后,如果想調(diào)用基類的同名方法,可以使用base關(guān)鍵字。如,在Dog類的Eat方法中,希望使用基類的Eat方法,可以用如下方法: public override void Eat() base.Eat(); ,5.3 抽象類與接口,5.3.1 抽象類 5.3.2 接口 5.3.3 抽象類與接口的比較,返回,5.3.1 抽象

14、類,抽象方法是指在基類的定義中,不包含任何實(shí)現(xiàn)代碼的方法,實(shí)際上就是一個不具有任何具體功能的方法。這樣的方法唯一的作用就是讓派生類重寫。 而只要在類中包含一個抽象方法,該類即為抽象類。在抽象類中,也可以聲明非抽象方法。 1抽象類與抽象方法的聲明 在C#中,抽象類和抽象方法使用關(guān)鍵字abstract聲明,一般形式如下: public abstract class 抽象類名 訪問修飾符 abstract 返回值類型 方法名(參數(shù)列表) ,5.3.1 抽象類,抽象類中也可以有抽象屬性。類的屬性成員添加了abstract關(guān)鍵字后,就成了抽象屬性。抽象屬性不提供屬性訪問器的實(shí)現(xiàn),它只聲明該類支持的屬性,

15、而將訪問器的實(shí)現(xiàn)留給派生類。抽象屬性同樣可以是只讀的、只寫的或可讀寫的屬性。一般形式如下: public abstract返回值類型 屬性名 get; set; 抽象類可以包含抽象的成員,如抽象屬性和抽象方法,也可以包含非抽象的成員,甚至還可以包含虛方法。要注意的是,抽象成員必須在抽象類中聲明,但抽象類不要求必須包含抽象成員,5.3.1 抽象類,2重載抽象方法 抽象類中的抽象方法和抽象屬性都沒有提供實(shí)現(xiàn),當(dāng)定義抽象類的派生類時,派生類必須重載基類的抽象方法和抽象屬性(如果派生類沒有進(jìn)行重載,則派生也必須聲明為抽象類,即在類定義前加上abstract。這一點(diǎn)是與虛方法不同的,因?yàn)閷τ诨惖奶摲椒?/p>

16、,其派生類可以不重載。重載抽象類的方法和屬性必須使用override關(guān)鍵字。重載抽象方法的格式為: public override方法名稱(參數(shù)列表) 其中,方法名稱和參數(shù)列表必須與抽象類中的抽象方法完全一致。,5.3.1 抽象類,【實(shí)例5-5】抽象方法和抽象類演示。,5.3.2 接口,接口(interface)是C#的一種數(shù)據(jù)類型,屬于引用類型。一個接口定義一個協(xié)定。接口可以包含方法、屬性、事件和索引器,接口本身不提供它所定義的成員的實(shí)現(xiàn),接口只指定實(shí)現(xiàn)該接口的類或結(jié)構(gòu)必須提供的成員。實(shí)現(xiàn)某接口的類必須遵守該接口定義的協(xié)定,即必須提供接口成員的實(shí)現(xiàn)。 1接口的聲明 在C#中,聲明接口使用in

17、terface關(guān)鍵字,一般形式如下: 訪問修飾符 interface 接口名 : 基接口列表 /接口成員 ,5.3.2 接口,接口成員可以是屬性、方法、索引器和事件,不能包含字段、構(gòu)造函數(shù)等。所有接口成員隱式地具有了public訪問修飾符,因此,接口成員不能添加任何訪問修飾符。下面示例定義了一個USB的接口,該接口包含了一個TransData方法簽名和一個獲到最大傳輸速率的只讀屬性。 interface IUsb int MaxSpeed get; string TransData(string from, string to); ,5.3.2 接口,2接口的實(shí)現(xiàn) 接口主要用來定義一個規(guī)則,讓

18、企業(yè)內(nèi)部或行業(yè)內(nèi)部的軟件開發(fā)人員按標(biāo)準(zhǔn)去實(shí)現(xiàn)應(yīng)用程序的功能。因此,繼承接口的類或結(jié)構(gòu)必須實(shí)現(xiàn)接口中的所有屬性、方法、索引器和事件,繼承接口的方法與繼承類相似 3接口的繼承 接口也可以繼承其它接口,而接口可以多繼承,即接口可以從多個接口繼承,基接口名之間用逗號分隔。,5.3.2 接口,4多重接口實(shí)現(xiàn) C#不允許多重類繼承,但是C#允許多重接口實(shí)現(xiàn),這意味著一個類可以實(shí)現(xiàn)多個接口,如果一個Mobile類支持USB,也可以支持Bluetooth,我們就應(yīng)該同時實(shí)現(xiàn)IUsb和IBluetooth接口,在繼承時,兩個接口之間用逗號分隔。其類的頭部如下所示: public class Mobile : I

19、Usb, IBluetooth 如果類Mobile是類phone的派生子類,也可以同時繼承phone類。但要注意,基類必須在所有的接口之前,如: public class Mobile : Phone,IUsb, IBluetooth,5.3.2 接口,5訪問接口的方法 當(dāng)類Mp3實(shí)現(xiàn)了IUsb后,我們可以通過MP3類的對象訪問IUsb的成員,就好象是Mp3類的成員一樣: Mp3 m = new Mp3(); lblShow.Text=m.TransData(計算機(jī),MP3設(shè)備); 或者我們也可以將Mp3對象轉(zhuǎn)換成接口類型,然后用這個接口來訪問方法: Mp3 m = new Mp3(); IU

20、sb iu = (IUsb)m; lblShow.Text = iu.TransData(計算機(jī), MP3設(shè)備);,5.3.2 接口,【實(shí)例5-6】接口演示。,5.3.3 抽象類與接口的比較,抽象類是一種不能實(shí)例化的類,抽象類可以包含抽象成員,也可以包含非抽象成員,即抽象類可以是完全實(shí)現(xiàn)的,也可以是部分實(shí)現(xiàn)的,或者完全不實(shí)現(xiàn)的。抽象類可以用來封裝所有派生類的通用功能。 與抽象類不同的是,接口頂多像一個完全沒有實(shí)現(xiàn)的只包含抽象成員的抽象類,因此無法使用接口來封裝所有派生類的通用功能,接口更多地用來制定程序設(shè)計開發(fā)規(guī)范,接口的代碼實(shí)現(xiàn)由開發(fā)者完成。例如,有關(guān)XML文檔的處理,萬維網(wǎng)聯(lián)盟(W3C)就

21、制定了一個DOM(文檔對象模型)規(guī)范,而具體的代碼實(shí)現(xiàn)由諸如Microsoft、Sun等公司去實(shí)現(xiàn)。,5.3.3 抽象類與接口的比較,C#規(guī)定一個類只能從一個基類派生,但允許從多個接口派生。例如,如果把實(shí)例5-6中的兩個接口改為抽象類,則不允許同時使用它們來派生Mobile類。 抽象類為管理組件版本提供了一個簡單易行的方法。通過更新基類,所有派生類都將自動進(jìn)行相應(yīng)改動。而接口在創(chuàng)建后就不能再更改,如果需要修改接口,必須創(chuàng)建新的接口。,5.4 嵌套類、分部類與命名空間,5.4.1 嵌套類 5.4.2 分部類 5.4.3 命名空間,返回,5.4.1 嵌套類,在類的內(nèi)部或結(jié)構(gòu)的內(nèi)部定義的類型稱為嵌套

22、類型,又稱內(nèi)部類型。不論是類還是結(jié)構(gòu),嵌套類型均默認(rèn)為private,嵌套類型也可以設(shè)置為public、internal、protected或protected internal。嵌套類型通常需要實(shí)例化為對象之后,才能引用其成員,其使用方法與類的普通成員使用基本相同。 【實(shí)例5-7】使用嵌套類計算長方形面積。,5.4.2 分部類,分部類允許將類、結(jié)構(gòu)或接口的定義拆分到兩個或多個源文件中,讓每個源文件只包含類型定義的一部分,編譯時編譯器自動把所有部分組合起來進(jìn)行編譯。 有了分部類,一個類的源代碼可以分布于多個獨(dú)立文件中,在處理大型項目時,過去很多只能由一個人進(jìn)行的編程任務(wù),現(xiàn)在可以由多個人同時進(jìn)

23、行,這樣將大大加快了程序設(shè)計的工作進(jìn)度。 有了分部類,使用自動生成的源代碼時,無需重新創(chuàng)建源文件便可將代碼添加到類中。事實(shí)上,當(dāng)創(chuàng)建Windows應(yīng)用程序或Web應(yīng)用程序時,就是在Visual Studio 2010自動生成源代碼的基礎(chǔ)之上專注于項目的業(yè)務(wù)處理,編譯時Visual Studio 2010會自動把編寫的代碼與自動生成的代碼進(jìn)行合并編譯。,5.4.2 分部類,處理分部類的定義時需遵循以下幾個規(guī)則: (1) 同一類型的各個部分的所有分部類的定義都必須使用partial進(jìn)行修飾。 (2) 如果將任意部分聲明為抽象的,則整個類型都被視為抽象的。如果將任意部分聲明為密封的,則整個類型都被視

24、為密封的。 (3) partial修飾符只能出現(xiàn)在緊靠關(guān)鍵字class、struct或interface前面的位置。 (4) 分部類的各部分或者各個源文件都可以獨(dú)立引用類庫,且堅持“誰使用誰負(fù)責(zé)添加引用”的原則。例如,上例中Test1.cs沒有使用類庫,則不添加類庫的引用,而Test2.cs調(diào)用了方法Console.WriteLine,則必須使用using System以添加系統(tǒng)類庫的引用。 (5) 分部類的定義中允許使用嵌套的分部類,5.4.3 命名空間,對于一個大型軟件項目來說,當(dāng)多個程序員共同參與開發(fā)時,因?yàn)檫@些程序員可能以同樣的名字來創(chuàng)建類。命名空間可將相互關(guān)聯(lián)的類組織起來,形成一個邏輯上相關(guān)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論