版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第5章
面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)面向?qū)ο蟮能浖_發(fā)技術(shù)是當(dāng)今計(jì)算機(jī)技術(shù)發(fā)展的重要成果和趨勢(shì)之一。C#是完全面向?qū)ο蟮某绦蛟O(shè)計(jì)語言。類和對(duì)象是面向?qū)ο蟪绦蛟O(shè)計(jì)中的重要概念。封裝性、繼承性和多態(tài)性是面向?qū)ο蟮奶攸c(diǎn)。本章主要介紹面向?qū)ο蟪绦蛟O(shè)計(jì)中的基本概念和基于C#的面向?qū)ο蟪绦蛟O(shè)計(jì)的方法。2023/11/252C#程序設(shè)計(jì)實(shí)用教程
5.1面向?qū)ο蟾攀?/p>
5.1.1面向?qū)ο蟮母拍蠲嫦驅(qū)ο蟪绦蛟O(shè)計(jì)(Object-OrientedProgramming)簡(jiǎn)稱OOP技術(shù)。面向?qū)ο缶幊碳夹g(shù)是計(jì)算機(jī)編程技術(shù)中一次重大的進(jìn)步。在面向?qū)ο缶幊碳夹g(shù)出現(xiàn)之前,程序的設(shè)計(jì)普遍采用的是面向過程的程序設(shè)計(jì)方法。2023/11/253C#程序設(shè)計(jì)實(shí)用教程5.1.1面向?qū)ο蟮母拍頞OP是一種系統(tǒng)化的程序設(shè)計(jì)方法,強(qiáng)調(diào)直接以問題域(即現(xiàn)實(shí)世界)中的事物為中心來考慮問題,并按照這些事物的本質(zhì)特征把它們抽象為對(duì)象。OOP的主要思想是將數(shù)據(jù)及處理這些數(shù)據(jù)的操作都封裝(Encapsulation)到一個(gè)稱為類(Class)的數(shù)據(jù)結(jié)構(gòu)中。使用這個(gè)類時(shí),只需要定義一個(gè)類的變量即可,這個(gè)變量(Object)通過調(diào)用對(duì)象的數(shù)據(jù)成員完成對(duì)類的使用。在這種方法下,編程人員不需要過分關(guān)注“如何做”,而是重點(diǎn)關(guān)注“做什么”。OOP編程思想較好地適應(yīng)了現(xiàn)實(shí)世界中的問題,因而得以廣泛應(yīng)用。2023/11/254C#程序設(shè)計(jì)實(shí)用教程5.1.2面向?qū)ο笳Z言的特點(diǎn)
面向?qū)ο蟮木幊谭绞骄哂欣^承、封裝和多態(tài)性等特點(diǎn)。(1)繼承在生活中,事物有很多的相似性,這種相似性是人們理解紛繁事物的一個(gè)基礎(chǔ)。因?yàn)槭挛镏g往往具有某種“繼承”關(guān)系。比如,兒子和父親往往有許多相似之處,因?yàn)閮鹤訌母赣H那里遺傳了許多特性;汽車與卡車、轎車、客車之間存在一般化與具體化的關(guān)系,它們也可以用繼承來實(shí)現(xiàn)。2023/11/255C#程序設(shè)計(jì)實(shí)用教程5.1.2面向?qū)ο笳Z言的特點(diǎn)
繼承(inheritance)是面向?qū)ο缶幊碳夹g(shù)的一塊基石,通過它可以創(chuàng)建分等級(jí)層次關(guān)系的類。繼承是父類和子類之間共享數(shù)據(jù)和方法的機(jī)制,通常把父類稱為基類,子類稱為派生類。子類可以從其父類中繼承屬性和方法,通過這種關(guān)系模型可以簡(jiǎn)化類的設(shè)計(jì)。假如已經(jīng)定義了A類,接下來準(zhǔn)備定義B類,而B類中有很多屬性和方法與A類相同,那么就可以實(shí)現(xiàn)B類繼承于A類,這樣就無須再在B類中定義A類中已具有的屬性和方法,從而可以在很大程序上提高程序的開發(fā)效率,提高代碼利用率。2023/11/256C#程序設(shè)計(jì)實(shí)用教程5.1.2面向?qū)ο笳Z言的特點(diǎn)
例如,可以將水果看作一個(gè)父類,那么水果類具有顏色屬性。然后再定義一個(gè)香蕉類,在定義香蕉類時(shí)就不需要定義香蕉類的顏色屬性,通過如下繼承關(guān)系可以使香蕉類具有顏色屬性。class水果類{ Public顏色;//在水果類中定義顏色屬性}class香蕉類
:水果類{ //香蕉類中其他的屬性和方法}2023/11/257C#程序設(shè)計(jì)實(shí)用教程5.1.2面向?qū)ο笳Z言的特點(diǎn)
(2)封裝類是屬性和方法的集合,為了實(shí)現(xiàn)某項(xiàng)功能而定義類后,開發(fā)人員并不需要了解類體內(nèi)每行代碼的具體涵義,只需通過對(duì)象來調(diào)用類內(nèi)某個(gè)屬性或方法即可實(shí)現(xiàn)某項(xiàng)功能,這就是類的封裝。封裝提供了外界與對(duì)象進(jìn)行交互的控制機(jī)制,設(shè)計(jì)和實(shí)施者可以公開外界需要直接操作的屬性和方法,而把其他的屬性和方法隱藏在對(duì)象內(nèi)部。這樣可以讓軟件程序封裝化,而且可以避免外界錯(cuò)誤地使用屬性和方法。2023/11/258C#程序設(shè)計(jì)實(shí)用教程5.1.2面向?qū)ο笳Z言的特點(diǎn)
以汽車為例,廠商把汽車的顏色公開給外界,外界想怎么改顏色都可以的,但是防盜系統(tǒng)的內(nèi)部構(gòu)造是隱藏起來的;更換汽缸可以是公開的行為,但是汽缸和發(fā)動(dòng)機(jī)的協(xié)調(diào)方法就沒有必要讓用戶知道了。2023/11/259C#程序設(shè)計(jì)實(shí)用教程5.1.2面向?qū)ο笳Z言的特點(diǎn)
(3)多態(tài)性類的多態(tài)(polymorph)指對(duì)于屬于同一個(gè)類的對(duì)象,在不同的場(chǎng)合能夠表現(xiàn)出不同的特征。多態(tài)性主要指在一般類中定義的屬性或行為,被特殊類繼承之后,可以具有不同數(shù)據(jù)類型或表現(xiàn)出不同的行為。這使得同一個(gè)屬性或行為在一般類及其各個(gè)特殊類具有不同的意義。例如:某個(gè)對(duì)象,其基類為“筆”,在調(diào)用它的“寫”方法時(shí),程序會(huì)自動(dòng)判斷出它的具體類型,如果是毛筆,則調(diào)用毛類對(duì)應(yīng)的“寫”方法,如果是鉛筆,則調(diào)用鉛筆對(duì)應(yīng)的“寫”方法。2023/11/2510C#程序設(shè)計(jì)實(shí)用教程
5.2定義類
在C#中,“類”是一種數(shù)據(jù)結(jié)構(gòu),它可以包含數(shù)據(jù)成員(常量和字段)、函數(shù)成員(方法、屬性、事件、索引器、運(yùn)算符、構(gòu)造函數(shù)、析構(gòu)函數(shù))。類是個(gè)靜態(tài)的概念,如果要使用某個(gè)類,就應(yīng)該定義該類的一個(gè)或多個(gè)實(shí)例,每一個(gè)實(shí)例就是一個(gè)對(duì)象。如果要使用某個(gè)類,只要向該類發(fā)送消息即可,而對(duì)象會(huì)利用自身存在的函數(shù)來響應(yīng)接收的消息。類類型支持繼承,繼承是一種使派生類可以對(duì)基類進(jìn)行擴(kuò)展和專用化的機(jī)制。2023/11/2511C#程序設(shè)計(jì)實(shí)用教程
5.2.1類的概念
類是對(duì)象概念在面向?qū)ο缶幊陶Z言中的反映,是相同對(duì)象的集合。類描述了一系列在概念上有相同含義的對(duì)象,并為這些對(duì)象統(tǒng)一定義了屬性和方法。類是對(duì)象的抽象描述和概括。例如:車是一個(gè)類,自行車、汽車、火車也是類。但是自行車、汽車、火車都是車這個(gè)類的子類。因?yàn)樗麄冇泄餐奶攸c(diǎn)都是交通工具,都有輪子,都可以運(yùn)輸。而汽車有顏色,車輪、車門、發(fā)動(dòng)機(jī),這是和自行車、火車的不同之處,是汽車類自己的屬性。而具體到某輛汽車就是一個(gè)對(duì)象了,例如:車牌照為蘇A2345**的黑色奧迪轎車。用具體的屬性可以在汽車類中唯一確定自己,并且對(duì)象具有類的操作。簡(jiǎn)而言之,類是C#中最為強(qiáng)大的數(shù)據(jù)類型,它定義了數(shù)據(jù)類型的數(shù)據(jù)和行為。2023/11/2512C#程序設(shè)計(jì)實(shí)用教程
5.2.1類的概念
在C#中,所有的內(nèi)容都被封裝在類中,類是C#的基礎(chǔ),每個(gè)類通過屬性和方法及其他一些成員來表達(dá)事物的狀態(tài)和行為。事實(shí)上,編寫C#程序的主要任務(wù)就是定義各種類及類的各種成員。2023/11/2513C#程序設(shè)計(jì)實(shí)用教程
5.2.2類的聲明
簡(jiǎn)單地講,類是一種數(shù)據(jù)結(jié)構(gòu),用于模擬現(xiàn)實(shí)中存在的對(duì)象和關(guān)系,包含靜態(tài)的屬性和動(dòng)態(tài)的方法。下面來看如何聲明類及其屬性、方法。在聲明一個(gè)類之前,需要向工程中新添加一個(gè)文件。2023/11/2514C#程序設(shè)計(jì)實(shí)用教程
5.2.2類的聲明
1.向工程添加新項(xiàng)目在VS.NET中添加一個(gè)新的類文件以及其他新項(xiàng)目。操作很簡(jiǎn)單,具體步驟如下:(1)在【解決方案瀏覽器】視圖中,在工程上單擊右鍵,再在打開的快捷菜單中選擇【添加】→【類】,如圖5-1所示。2023/11/2515C#程序設(shè)計(jì)實(shí)用教程
5.2.2類的聲明
(2)在此時(shí)彈出的對(duì)話框中選擇添加類文件,并為新文件命名,以.cs作為后綴,如圖5-2所示。(3)單擊【打開】按鈕后,就可以在【解決方案瀏覽器】視圖中看到這個(gè)新的類文件了。(4)雙擊該類文件,可以在其中聲明新的類。當(dāng)然,也可以把多個(gè)功能類似的類放在一個(gè)類文件中。2023/11/2516C#程序設(shè)計(jì)實(shí)用教程
5.2.2類的聲明
2.聲明類C#中類的聲明需要使用class關(guān)鍵字,并把類的主體放在花括號(hào)中,格式如下:[類修飾符]class類名
[:基類類名]{ //屬性 //方法}其中,除了class關(guān)鍵字和類名外,剩余的都是可選項(xiàng);類名必須是合法的C#標(biāo)識(shí)符,它將作為新定義的類的類型標(biāo)識(shí)符。2023/11/2517C#程序設(shè)計(jì)實(shí)用教程
5.2.2類的聲明
注意:為了促進(jìn)C#程序的標(biāo)準(zhǔn)化和可讀性,應(yīng)盡量采用.NETFramework推薦的類命名規(guī)則:類名盡量是一個(gè)名詞或者名詞短語,首字母大寫,并盡量避免縮寫。class關(guān)鍵字前面是訪問級(jí)別。在C#中,類的訪問級(jí)別由類的修飾符進(jìn)行限定,類的修飾符如表5-1所示。在上例中,如果類的修飾符為public,這表示該類可以被任何其他類訪問。類的名稱位于class關(guān)鍵字的后面。2023/11/2518C#程序設(shè)計(jì)實(shí)用教程
5.2.2類的聲明
以上的類修飾符可以兩個(gè)或多個(gè)組合起來使用,但需要注意下面幾點(diǎn):(1)
在一個(gè)類聲明中,同一類修飾符不能多次出現(xiàn),否則會(huì)出錯(cuò)。(2)new類修飾符僅允許在嵌套類中表示類聲明時(shí)使用,表明類中隱藏了由基類中繼承而來的、與基類中同名的成員。2023/11/2519C#程序設(shè)計(jì)實(shí)用教程
5.2.2類的聲明
(3)在使用public、protected、internal和private這些類修飾符時(shí),要注意這些類修飾符不僅表示所定義類的訪問特性,而且還表明類中成員聲明中的訪問特性,并且它們的可用性也會(huì)對(duì)派生類造成影響。(4)抽象類修飾符abstract和密封類修飾符sealed都是受限類修飾符。2023/11/2520C#程序設(shè)計(jì)實(shí)用教程
5.2.2類的聲明
(5)如果省略類修飾符,則默認(rèn)為修飾符internal。(6)對(duì)于具有繼承關(guān)系的類才有基類。如果一個(gè)類沒有從任何類繼承,就不需要基類類名選項(xiàng)。在C#中,一個(gè)類只能從另一個(gè)類中繼承,而不能從多個(gè)類中繼承;而在C++及其他面向?qū)ο蟮某绦蛟O(shè)計(jì)語言中,一個(gè)類可以從多個(gè)其他類中繼承。如果一個(gè)類想繼承多個(gè)類的特點(diǎn),可以采用接口的方法實(shí)現(xiàn)。2023/11/2521C#程序設(shè)計(jì)實(shí)用教程Msdn:搜索accessmodifiers
ClassandStructAccessibility
Classesandstructsthataredeclareddirectlywithinanamespace(inotherwords,thatarenotnestedwithinotherclassesorstructs)canbeeitherpublicorinternal.Internalisthedefaultifnoaccessmodifierisspecified.ClassandStructMemberAccessibility
Classmembers(includingnestedclassesandstructs)canbedeclaredwithanyofthefivetypesofaccess.Structmemberscannotbedeclaredasprotectedbecausestructsdonotsupportinheritance.訪問權(quán)限控制圖解public
Thetypeormembercanbeaccessedbyanyothercodeinthesameassemblyoranotherassemblythatreferencesit.private
Thetypeormembercanbeaccessedonlybycodeinthesameclassorstruct.protected
Thetypeormembercanbeaccessedonlybycodeinthesameclassorstruct,orinaclassthatisderivedfromthatclass.internal
Thetypeormembercanbeaccessedbyanycodeinthesameassembly,butnotfromanotherassembly.protectedinternalThetypeormembercanbeaccessedbyanycodeintheassemblyinwhichitisdeclared,orfromwithinaderivedclassinanotherassembly.Accessfromanotherassemblymusttakeplacewithinaclassdeclarationthatderivesfromtheclassinwhichtheprotectedinternalelementisdeclared,anditmusttakeplacethroughaninstanceofthederivedclasstype.
5.2.2類的聲明
下面以一個(gè)學(xué)生類的實(shí)例,說明該類在C#中的實(shí)現(xiàn)。該類的類圖如圖5-3所示。【例5-1】定義一個(gè)學(xué)生類。publicclassStudent{//屬性//學(xué)號(hào)、姓名、年齡等
//方法//長(zhǎng)大、入學(xué)、畢業(yè)等}
2023/11/2526C#程序設(shè)計(jì)實(shí)用教程
5.2.3類的靜態(tài)特性
屬性(或字段)可以看作是類的靜態(tài)描述,同樣,在定義屬性時(shí),也可以使用訪問修飾符來定義其訪問級(jí)別。屬性的定義格式如下:
[attribe-modifier]data-typeattribute-name;其中,屬性修飾符attribe-modifier包括public、private、protected。下面的例子用來說明public和private修飾符的作用。
2023/11/2527C#程序設(shè)計(jì)實(shí)用教程
5.2.3類的靜態(tài)特性
【例5-2】public和private修飾符的作用。usingSystem;
namespaceExample_PublicAndPrivate{///<summary>///學(xué)生類///</summary>publicclassStudent{//屬性
publicstringstrName;//公有屬性privateint
nAge; //私有屬性
//方法...}
///<summary>///Main函數(shù)類///</summary>classTest{///<summary>///應(yīng)用程序的主入口點(diǎn)。///</summary>staticvoidMain(string[]args){Students=newStudent();
s.strName="張三“;//正確
s.nAge=20;//錯(cuò)誤,不能訪問}}}
2023/11/2528C#程序設(shè)計(jì)實(shí)用教程
5.2.3類的靜態(tài)特性
上述程序中,定義一個(gè)Student類,包含一個(gè)公有屬性“strName”和一個(gè)私有屬性“nAge”。在Test類中,試圖對(duì)學(xué)生類的對(duì)象s的年齡進(jìn)行設(shè)置,但是Student類的nAge屬性是私有的,在其他的類中無法訪問,因此程序會(huì)報(bào)錯(cuò),報(bào)錯(cuò)信息如圖5-4所示。而訪問其公有屬性strName就不會(huì)有問題。2023/11/2529C#程序設(shè)計(jì)實(shí)用教程
5.2.4類的動(dòng)態(tài)行為
類的屬性是客觀世界實(shí)體性質(zhì)的抽象,而方法是實(shí)體所能執(zhí)行的操作。下面來看如何聲明其動(dòng)態(tài)方法。同屬性一樣,類的方法也具有訪問屬性,如public、private、protected等,其定義格式如下:
[method-modifier]return-typemethod-name{parament-list};下面的例子為Student類定義了公有方法SetAge()和GetAge(),用于設(shè)置和獲取其靜態(tài)屬性“年齡”。2023/11/2530C#程序設(shè)計(jì)實(shí)用教程
5.2.4類的動(dòng)態(tài)行為
【例5-3】類的公有方法的示例。usingSystem;
namespaceDeclareMethod{///<summary>///學(xué)生類///</summary>publicclassStudent{//屬性
publicstringstrName; //公有屬性privateint
nAge; //私有屬性
//方法...publicvoidSetAge(int_nAge){
this.nAge=_nAge;}
2023/11/2531C#程序設(shè)計(jì)實(shí)用教程
5.2.4類的動(dòng)態(tài)行為
publicint
GetAge(){returnthis.nAge;}}
///<summary>///Main函數(shù)類///</summary>classClass1{staticvoidMain(string[]args){Students=newStudent();s.SetAge(20);
//賦值年齡
Console.WriteLine(s.GetAge()); //獲取年齡}}}2023/11/2532C#程序設(shè)計(jì)實(shí)用教程
5.2.4類的動(dòng)態(tài)行為
程序中為各個(gè)學(xué)生定義了公有方法SetAge(),其功能是為類的私有屬性“年齡”賦值;同時(shí)為學(xué)生類定義了獲取“年齡”屬性值的公有方法GetAge()。通過SetAge()方法,并傳遞適當(dāng)?shù)膮?shù),便可以為學(xué)生s的年齡賦值,而通過調(diào)用GetAge()方法獲取其年齡,并輸出。2023/11/2533C#程序設(shè)計(jì)實(shí)用教程
5.2.5創(chuàng)建類的實(shí)例
類是現(xiàn)實(shí)世界中對(duì)象或者關(guān)系的模擬,是一個(gè)抽象的概念。例如,像“學(xué)生”這個(gè)概念,世界上并沒有一個(gè)叫做“學(xué)生”的活生生的東西,而只有“張三”或者“李四”這些具體的學(xué)生實(shí)例,這反應(yīng)了類和對(duì)象的關(guān)系。(1)類是具有相同或相似結(jié)構(gòu)、操作和約束規(guī)則的對(duì)象組成的集合。(2)對(duì)象是某一類的具體化實(shí)例,每一個(gè)類都具有某些共同特征對(duì)象的抽象。C#使用new關(guān)鍵字來實(shí)現(xiàn)實(shí)例化類得到一個(gè)具體的對(duì)象,其格式如下:
class-nameobject-name=newClass-name([paramenter-list]);在前面的示例中已經(jīng)用到創(chuàng)建類實(shí)例,都是使用new關(guān)鍵字得到一個(gè)具體的學(xué)生對(duì)象。如下列代碼所示:
Students=newStudent();2023/11/2534C#程序設(shè)計(jì)實(shí)用教程
5.2.6繼承類
繼承的本質(zhì)是代碼重用。當(dāng)要構(gòu)造一個(gè)新的類時(shí),通常無需從頭開始。例如,在學(xué)生類的基礎(chǔ)上,可以建立一個(gè)“大學(xué)生”類。很明顯,“大學(xué)生”這個(gè)類具有自己的新特點(diǎn),如“所在系”就并不是所有的學(xué)生都有的,而是大學(xué)生才有的特殊性質(zhì)。因此,可以把大學(xué)生看作是學(xué)生的一種延續(xù),即在繼承了學(xué)生的屬性和方法基礎(chǔ)之上,又包含了新的屬性或方法。在構(gòu)造大學(xué)生這個(gè)類時(shí),只需在學(xué)生類的基礎(chǔ)上添加大學(xué)生特有的特性即可,而無需從頭開始。此時(shí),稱學(xué)生類為父類,大學(xué)生類為子類。在C#中,用符號(hào)“:”來實(shí)現(xiàn)類的繼承。2023/11/2535C#程序設(shè)計(jì)實(shí)用教程
5.2.6繼承類
【例5-4】類繼承的示例。usingSystem;
namespaceExample_Inheritance{///<summary>///學(xué)生類///</summary>publicclassStudent{publicstringstrName; //姓名publicint
nAge; //年齡}
2023/11/2536C#程序設(shè)計(jì)實(shí)用教程
5.2.6繼承類
///<summary>///大學(xué)生類:繼承學(xué)生類///</summary>publicclassCollegeStudent:Student{publicstringstrInsititute; //所在系
}
2023/11/2537C#程序設(shè)計(jì)實(shí)用教程
5.2.6繼承類
///<summary>///程序入口:主函數(shù)類///</summary>publicclassMainClass{///<summary>///主函數(shù)///</summary>staticvoidMain(string[]args){Students=newStudent();
s.strName="xiaobao";
s.nAge=18;
Console.WriteLine("姓名:{0},年齡{1}",s.strName,s.nAge);
2023/11/2538C#程序設(shè)計(jì)實(shí)用教程
5.2.6繼承類
//使用子類
Console.WriteLine("--------------------使用子類-------------------");
CollegeStudentc=newCollegeStudent();
c.strName="小寶";
c.nAge=23;
c.strInsititute="計(jì)算機(jī)系";
Console.WriteLine("姓名:{0},年齡:{1}歲,所屬系:{2}",c.strName,c.nAge,c.strInsititute);
Console.ReadKey();}}}2023/11/2539C#程序設(shè)計(jì)實(shí)用教程
5.2.6繼承類
程序運(yùn)行結(jié)果如圖5-5所示。注意:此時(shí),大學(xué)生類具有學(xué)生類的所有屬性和方法,另外,還具有其獨(dú)自的屬性——所在系。不難看出,繼承就是指一個(gè)子類能夠直接獲得父類的性質(zhì)或特征,而不必重復(fù)定義。顯然,繼承具有傳遞性。另外,C#只支持單繼承,即一個(gè)類只能繼承一個(gè)父類。2023/11/2540C#程序設(shè)計(jì)實(shí)用教程
5.3構(gòu)造函數(shù)和析構(gòu)函數(shù)
在實(shí)際應(yīng)用中,方法的定義和調(diào)用是很復(fù)雜的。在此,將從兩個(gè)特殊的方法(構(gòu)造函數(shù)和析構(gòu)函數(shù))入手,對(duì)其進(jìn)行進(jìn)一步的討論。在C#中,構(gòu)造函數(shù)是當(dāng)類實(shí)例化時(shí)首先執(zhí)行的函數(shù)。反之,析構(gòu)函數(shù)是當(dāng)實(shí)例(也就是對(duì)象)從內(nèi)存中銷毀前最后執(zhí)行的函數(shù)。這兩個(gè)函數(shù)的執(zhí)行是無條件的,并且不需要程序手工干預(yù)。也就是說,只要定義一個(gè)對(duì)象或銷毀一個(gè)對(duì)象,不用顯式地調(diào)用構(gòu)造函數(shù)或析構(gòu)函數(shù),系統(tǒng)都會(huì)自動(dòng)在創(chuàng)建對(duì)象時(shí)調(diào)用構(gòu)造函數(shù),而在銷毀對(duì)象時(shí)調(diào)用析構(gòu)函數(shù)。2023/11/2541C#程序設(shè)計(jì)實(shí)用教程
5.3.1構(gòu)造函數(shù)
在實(shí)例化對(duì)象的時(shí)候,對(duì)象的初始化是自動(dòng)完成的,并且這個(gè)對(duì)象是空的。有時(shí),我們希望創(chuàng)建一個(gè)對(duì)象時(shí)要為其初始化某些特征,這時(shí)就需要用到構(gòu)造函數(shù)。在C#中,構(gòu)造函數(shù)是特殊的成員函數(shù)。構(gòu)造函數(shù)的特殊性表現(xiàn)在如下幾個(gè)方面:(1)構(gòu)造函數(shù)的函數(shù)名和類的名稱一樣。(2)構(gòu)造函數(shù)可以帶參數(shù),但沒有返回值。(3)構(gòu)造函數(shù)在對(duì)象定義時(shí)被自動(dòng)調(diào)用。2023/11/2542C#程序設(shè)計(jì)實(shí)用教程
5.3.1構(gòu)造函數(shù)
(4)如果沒有給類定義構(gòu)造函數(shù),則編譯系統(tǒng)會(huì)自動(dòng)生成一個(gè)默認(rèn)的構(gòu)造函數(shù)。(5)構(gòu)造函數(shù)可以被重載,但不可以被繼承。(6)構(gòu)造函數(shù)的類型修飾符總是public。如果是private,則表示這個(gè)類不能被實(shí)例化,這通常用于只含有靜態(tài)成員的類中。2023/11/2543C#程序設(shè)計(jì)實(shí)用教程
5.3.1構(gòu)造函數(shù)
【例5-5】通過構(gòu)造函數(shù),實(shí)現(xiàn)在產(chǎn)生一個(gè)學(xué)生對(duì)象時(shí)為其完成起名工作。usingSystem;
namespaceExample_Construct{///<summary>///學(xué)生類///</summary>publicclassStudent{publicstringstrName; //域
2023/11/2544C#程序設(shè)計(jì)實(shí)用教程
5.3.1構(gòu)造函數(shù)
///<summary>///構(gòu)造函數(shù),為學(xué)生起名///</summary>publicStudent(string_strName){
this.strName=_strName;}
}classClass1{
staticvoidMain(string[]args){Students=newStudent("張三");
Console.WriteLine(s.strName);}}}2023/11/2545C#程序設(shè)計(jì)實(shí)用教程
5.3.1構(gòu)造函數(shù)
注意:在Student類中,定義了方法Student(),注意這個(gè)方法與Student類同名。這樣,每當(dāng)實(shí)例化一個(gè)Student對(duì)象時(shí),總會(huì)執(zhí)行這個(gè)函數(shù)。在構(gòu)造函數(shù)中可以沒有參數(shù),也可以有一個(gè)或多個(gè)參數(shù)。這表明構(gòu)造函數(shù)在類的聲明中可以有函數(shù)名相同,但參數(shù)個(gè)數(shù)不同或者參數(shù)不同的多種形式,這就是構(gòu)造函數(shù)重載。用new關(guān)鍵字創(chuàng)建一個(gè)類的對(duì)象時(shí),類名后的一對(duì)圓括號(hào)提供初始化列表,這實(shí)際上就是提供給構(gòu)造函數(shù)的參數(shù)。系統(tǒng)根據(jù)這個(gè)初始化列表的參數(shù)個(gè)數(shù)、參數(shù)類型和參數(shù)順序調(diào)用不同的構(gòu)造函數(shù)。2023/11/2546C#程序設(shè)計(jì)實(shí)用教程
5.3.1構(gòu)造函數(shù)
【例5-6】實(shí)現(xiàn)Time類的構(gòu)造函數(shù)及其重載。usingSystem;
namespaceExample_ConstructOverload{classTime{publicint
nHour,nMinute,nSecond;publicTime(){
nHour=nMinute=nSecond=0;}
2023/11/2547C#程序設(shè)計(jì)實(shí)用教程
5.3.1構(gòu)造函數(shù)
publicTime(intHour){
nHour=Hour;
nMinute=nSecond=0;}publicTime(int
Hour,intMinute){
nHour=Hour;
nMinute=Minute;
nSecond=0;}2023/11/2548C#程序設(shè)計(jì)實(shí)用教程
5.3.1構(gòu)造函數(shù)
publicTime(int
Hour,int
Minute,intSecond){
nHour=Hour;
nMinute=Minute;
nSecond=Second;}}classTest{staticvoidMain(){Timet1,t2,t3,t4;2023/11/2549C#程序設(shè)計(jì)實(shí)用教程
5.3.1構(gòu)造函數(shù)
//對(duì)t1,t2,t3,t4分別調(diào)用不同的構(gòu)造函數(shù)t1=newTime();t2=newTime(10);t3=newTime(10,30);t4=newTime(10,30,30);Console.WriteLine("t1的時(shí)間為:{0}時(shí){1}分鐘{2}秒",t1.nHour,t1.nMinute,t1.nSecond);Console.WriteLine("t2的時(shí)間為:{0}時(shí){1}分鐘{2}秒",t2.nHour,t2.nMinute,t2.nSecond);Console.WriteLine("t3的時(shí)間為:{0}時(shí){1}分鐘{2}秒",t3.nHour,t3.nMinute,t3.nSecond);Console.WriteLine("t4的時(shí)間為:{0}時(shí){1}分鐘{2}秒",t4.nHour,t4.nMinute,t4.nSecond);}}}2023/11/2550C#程序設(shè)計(jì)實(shí)用教程
5.3.1構(gòu)造函數(shù)
程序運(yùn)行結(jié)果如圖5-6所示。注意:實(shí)例對(duì)象創(chuàng)建時(shí),根據(jù)不同的參數(shù)調(diào)用相應(yīng)的構(gòu)造函數(shù)完成初始化。2023/11/2551C#程序設(shè)計(jì)實(shí)用教程
5.3.2析構(gòu)函數(shù)
前面,介紹了使用構(gòu)造函數(shù)在實(shí)例化對(duì)象時(shí)自動(dòng)完成一些初始化工作。反之,在銷毀對(duì)象時(shí),有時(shí)候也希望能自動(dòng)一些做“收尾”任務(wù),例如關(guān)閉數(shù)據(jù)庫(kù)連接等。C#使用析構(gòu)函數(shù)來完成這個(gè)功能。2023/11/2552C#程序設(shè)計(jì)實(shí)用教程
5.3.2析構(gòu)函數(shù)
析構(gòu)函數(shù)也是類的特殊的成員函數(shù),它主要用于釋放類實(shí)例。析構(gòu)函數(shù)的特殊性表現(xiàn)在以下幾個(gè)方面:(1)析構(gòu)函數(shù)的名字也與類名相同,只是需要在其前面加了一個(gè)符號(hào)“~”。(2)析構(gòu)函數(shù)不接收任何參數(shù),沒有任何返回值,也沒有任何訪問關(guān)鍵字。(3)當(dāng)撤銷對(duì)象時(shí),自動(dòng)調(diào)用析構(gòu)函數(shù)。(4)析構(gòu)函數(shù)不能被繼承,也不能被重載。注意:另外,如果試圖聲明其他不與類名相同,但是以“~”開頭的方法,編譯器會(huì)產(chǎn)生錯(cuò)誤。2023/11/2553C#程序設(shè)計(jì)實(shí)用教程
5.3.2析構(gòu)函數(shù)
【例5-7】為Student類建立析構(gòu)函數(shù)。publicclassStudent{///<summary>///析構(gòu)函數(shù)///</summary>~Student(){
Console.WriteLine("CallDestructMethod.");}}當(dāng)程序使用完一個(gè)學(xué)生對(duì)象后,都會(huì)自動(dòng)調(diào)用這個(gè)析構(gòu)函數(shù),輸出“CallDestructMethod.”。2023/11/2554C#程序設(shè)計(jì)實(shí)用教程
5.3.2析構(gòu)函數(shù)
說明:事實(shí)上,一般并不需要使用析構(gòu)函數(shù),.NETFramework提供了默認(rèn)的析構(gòu)函數(shù)執(zhí)行內(nèi)存清理等工作。如果確定需要在銷毀對(duì)象前,完成一些特殊的任務(wù),才需要使用自定義的析構(gòu)函數(shù)。2023/11/2555C#程序設(shè)計(jì)實(shí)用教程
5.3.2析構(gòu)函數(shù)
【例5-8】構(gòu)造函數(shù)和析構(gòu)函數(shù)的使用。usingSystem;
namespaceExample_ConstructAndDestruct{classPoint{
intx,y,z;publicPoint(){
this.z=0;}2023/11/2556C#程序設(shè)計(jì)實(shí)用教程
5.3.2析構(gòu)函數(shù)
publicPoint(intx,inty){
this.x=x;
this.y=y;
this.z=x+y;}publicint_Z //屬性{get{returnthis.z;}set{this.z=value;}}2023/11/2557C#程序設(shè)計(jì)實(shí)用教程
5.3.2析構(gòu)函數(shù)
~Point(){
Console.WriteLine("~Point()isbeingcalled.");}}classTest{staticvoidMain(){Pointp1=newPoint(1,5);Pointp2=newPoint();Console.WriteLine("p1.z="+p1._Z);Console.WriteLine("p2.z="+p2._Z);}}}2023/11/2558C#程序設(shè)計(jì)實(shí)用教程
5.4方法
在前面,對(duì)類的方法進(jìn)行了簡(jiǎn)單的介紹,也對(duì)特殊的類方法——構(gòu)造和析構(gòu)函數(shù)進(jìn)行了介紹。在實(shí)際應(yīng)用中,方法的定義和調(diào)用要復(fù)雜得多。本節(jié)將從輸入?yún)?shù)、方法重載等方面,對(duì)其進(jìn)行進(jìn)一步的討論。2023/11/2559C#程序設(shè)計(jì)實(shí)用教程
5.4.1方法的定義及調(diào)用
方法是類中用于執(zhí)行計(jì)算或進(jìn)行其他操作的函數(shù)成員。1.方法的定義方法由方法頭和方法體組成,其一般定義的格式為:修飾符返回值類型方法名(形式參數(shù)列表){
方法體各語句;}2023/11/2560C#程序設(shè)計(jì)實(shí)用教程
5.4.1方法的定義及調(diào)用
說明:(1)如果省略“方法修飾符”,默認(rèn)為private,表示該方法為類的私有成員。(2)“返回值類型”指定該方法返回?cái)?shù)據(jù)的類型,它可以是任何有效的類型,C#通過方法中的return語句得到返回值。如果方法不需要返回一個(gè)值,其返回值類型必須是void。(3)方法名要求滿足C#標(biāo)識(shí)符的命名規(guī)則,括號(hào)()是方法的標(biāo)志,不能省略。(4)“方法參數(shù)列表”是逗號(hào)分隔的類型、標(biāo)識(shí)符對(duì)。這里的參數(shù)是形式參數(shù),本質(zhì)是一個(gè)變量,它用來在調(diào)用方法時(shí)接收傳給方法的實(shí)際參數(shù)的值。如果方法沒有參數(shù),那么參數(shù)列表為空。2023/11/2561C#程序設(shè)計(jì)實(shí)用教程
5.4.1方法的定義及調(diào)用
【例5-9】方法的定義。classMotorcycle{publicvoidStartEngine(){}publicvoidAddGas(intgallons){}publicint
Drive(intmiles,intspeed){return0;}}2023/11/2562C#程序設(shè)計(jì)實(shí)用教程
5.4.1方法的定義及調(diào)用
2.方法的調(diào)用調(diào)用對(duì)象的方法類似于訪問字段。在對(duì)象名稱名稱之后,依次添加句點(diǎn)、方法名稱和括號(hào)。參數(shù)在括號(hào)內(nèi)列出,并用逗號(hào)隔開。因此,可以如下例來調(diào)用Motorcycle類的方法?!纠?-10】方法的調(diào)用。Motorcyclemoto=newMotorcycle();moto.StartEngine();moto.AddGas(15);moto.Drive(5,20);2023/11/2563C#程序設(shè)計(jì)實(shí)用教程
5.4.1方法的定義及調(diào)用
3.從方法返回一般來說有兩種情況將導(dǎo)致方法返回。(1)當(dāng)遇到方法的結(jié)束花括號(hào)。(2)執(zhí)行到return語句。有兩種形式的return語句:一種用在void方法中(即無需有返回值的方法),另一種用在有返回值的方法中。2023/11/2564C#程序設(shè)計(jì)實(shí)用教程
5.4.1方法的定義及調(diào)用
【例5-11】通過方法的結(jié)束花括號(hào)返回。usingSystem;
namespaceMethod{classMyClass{publicvoidmyMethod(){
inti;for(i=0;i<10;i++){if(i%3==0)continue;Console.WriteLine("{0}\t",i);}}
2023/11/2565C#程序設(shè)計(jì)實(shí)用教程
5.4.1方法的定義及調(diào)用
staticvoidMain(){
MyClass
mycls=newMyClass();
mycls.myMethod();}}}程序的運(yùn)行結(jié)果為:1245782023/11/2566C#程序設(shè)計(jì)實(shí)用教程
5.4.1方法的定義及調(diào)用
【例5-12】通過方法的return語句返回。usingSystem;
namespaceMethod{classMyClass{publicvoidmyMethod(){
inti=8;if(i>=5){i=i*2;
Console.WriteLine(i);return;}else{i=i*3;
Console.WriteLine(i);return;}}staticvoidMain(){
MyClass
mycls=newMyClass();
mycls.myMethod();}}}2023/11/2567C#程序設(shè)計(jì)實(shí)用教程
5.4.1方法的定義及調(diào)用
使用下述形式的return語句從方法返回一個(gè)值給調(diào)用者:格式:returnvalue;【例5-13】通過方法的return語句返回值。usingSystem;
namespaceMethod{classMyClass{publicint
myMethod(){
inti=8;if(i>=5){i=i*2;returni;}
else{i=i*3;returni;}}staticvoidMain(){
MyClass
mycls=newMyClass();
Console.WriteLine(mycls.myMethod());}}}2023/11/2568C#程序設(shè)計(jì)實(shí)用教程
5.4.2方法的參數(shù)
調(diào)用方法時(shí),可以給方法傳遞一個(gè)或多個(gè)值。傳給方法的值稱為實(shí)參(argument),在方法內(nèi)部,接收實(shí)參值的變量稱為形參(parameter),形參在緊跟著方法名的括號(hào)中聲明。形參的聲明語法與變量的聲明語法一樣。形參只在方法內(nèi)部有效,除了將接收實(shí)參的值外,它與一般的變量沒什么區(qū)別。C#方法的參數(shù)類型主要有:值參數(shù)、引用參數(shù)、輸出參數(shù)和參數(shù)數(shù)組。2023/11/2569C#程序設(shè)計(jì)實(shí)用教程
5.4.2方法的參數(shù)
1.值參數(shù)沒有用任何修飾符聲明的參數(shù)為值參數(shù),它表明實(shí)參與形參之間按值傳遞。當(dāng)這個(gè)方法被調(diào)用時(shí),編譯器為值參數(shù)分配存儲(chǔ)單元,然后將對(duì)應(yīng)的實(shí)參的值拷貝到形參中。實(shí)參可以是變量、常量、表達(dá)式,但要求其值的類型必須與形參聲明的類型相同或者能夠被隱式地轉(zhuǎn)化為這種類型。這種傳遞方式的好處是在方法中對(duì)形參的修改不會(huì)影響外部的實(shí)參,也就是說數(shù)據(jù)只能傳入方法而不能從方法傳出。2023/11/2570C#程序設(shè)計(jì)實(shí)用教程
5.4.2方法的參數(shù)
【例5-14】使用值參數(shù)。usingSystem;
namespaceValueParameters{classMyClass{publicvoidSwap(intx,inty){
intk;k=x;x=y;y=k;}}
2023/11/2571C#程序設(shè)計(jì)實(shí)用教程
5.4.2方法的參數(shù)
classTest{staticvoidMain(){
inta=8,b=10;
Console.WriteLine("a={0},b={1}",a,b);
MyClass
mycls=newMyClass();
mycls.Swap(a,b);
Console.WriteLine("a={0},b={1}",a,b);}}}程序的運(yùn)行結(jié)果為:a=8,b=10a=8,b=102023/11/2572C#程序設(shè)計(jì)實(shí)用教程
5.4.2方法的參數(shù)
2.引用參數(shù)用ref修飾符聲明的參數(shù)為引用參數(shù)。引用參數(shù)與值參數(shù)不同,引用參數(shù)并不創(chuàng)建新存儲(chǔ)單元,它與方法調(diào)用中的實(shí)參變量同處一個(gè)存儲(chǔ)單元。因此,在方法內(nèi)對(duì)形參的修改就是對(duì)外部實(shí)參變量的修改。在函數(shù)調(diào)用中,引用參數(shù)必須被賦初值。在調(diào)用時(shí),傳遞給ref參數(shù)的必須是變量,類型必須相同,并且必須使用ref修飾。2023/11/2573C#程序設(shè)計(jì)實(shí)用教程
5.4.2方法的參數(shù)
【例5-15】使用引用參數(shù)。usingSystem;
namespaceReferenceParameters{classMyClass{publicvoidSwap(ref
intx,refinty){
intk;k=x;x=y;y=k;}}2023/11/2574C#程序設(shè)計(jì)實(shí)用教程
5.4.2方法的參數(shù)
classTest{staticvoidMain(){
inta=8,b=10;
Console.WriteLine("a={0},b={1}",a,b);
MyClass
mycls=newMyClass();
mycls.Swap(refa,refb);
Console.WriteLine("a={0},b={1}",a,b);}}}程序的運(yùn)行結(jié)果為:a=8,b=10a=10,b=82023/11/2575C#程序設(shè)計(jì)實(shí)用教程usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespace方法參數(shù)_結(jié)構(gòu)體類{publicstructStudent{publicstringname;publicvoidChangeStruct(Studentst){="學(xué)生";}}publicclassTeacher{publicstringname;publicvoidChangeClass(Teachert){="老師";}}classProgram{staticvoidMain(string[]args){Students;="Structisunchaged!";Teachert=newTeacher();="Classischanged";s.ChangeStruct(s);t.ChangeClass(t);Console.WriteLine();Console.WriteLine();}}}usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespace方法參數(shù)_結(jié)構(gòu)體類{publicstructStudent{publicstringname;publicvoidChangeStruct(refStudentst){="學(xué)生";}}publicclassTeacher{publicstringname;publicvoidChangeClass(refTeachert){="老師";}}classProgram{staticvoidMain(string[]args){Students;="Structisunchaged!";Teachert=newTeacher();="Classischanged";s.ChangeStruct(refs);t.ChangeClass(reft);Console.WriteLine();Console.WriteLine();}}}
5.4.2方法的參數(shù)
3.輸出參數(shù)用out修飾符定義的參數(shù)稱為輸出參數(shù)。如果希望方法返回多個(gè)值,可使用輸出參數(shù)。輸出參數(shù)與引用參數(shù)類似,它也不產(chǎn)生新的存儲(chǔ)空間。兩者的區(qū)別在于:out參數(shù)只能用于從方法中傳出值,而不能從方法調(diào)用處接受實(shí)參數(shù)值;在方法體內(nèi)out參數(shù)被認(rèn)為是未賦過值的,所以在方法結(jié)束之前應(yīng)該對(duì)out參數(shù)賦值。2023/11/2578C#程序設(shè)計(jì)實(shí)用教程
5.4.2方法的參數(shù)
【例5-16】使用輸出參數(shù)。usingSystem;
namespaceOutputParameters{publicclassStudent{publicstringstrName;//姓名publicint
nAge;//年齡
///構(gòu)造函數(shù)publicStudent(string_strName,int_nAge){
strName=_strName;
nAge=_nAge;}
2023/11/2579C#程序設(shè)計(jì)實(shí)用教程
5.4.2方法的參數(shù)
///長(zhǎng)大_nSpan歲publicvoidGrow(int_nSpan,outint_nOutCurrentAge){
nAge+=_nSpan;_nOutCurrentAge=nAge;}}publicclassTest{staticvoidMain(){Students=newStudent("張三",21);
int
nCurrentAge;s.Grow(3,outnCurrentAge);
Console.WriteLine(nCurrentAge);//輸出24}}}2023/11/2580C#程序設(shè)計(jì)實(shí)用教程
5.4.2方法的參數(shù)
程序的輸出結(jié)果如下:24注意:在上例中,在調(diào)用時(shí)需要在輸入?yún)?shù)前加out關(guān)鍵字。2023/11/2581C#程序設(shè)計(jì)實(shí)用教程給定一個(gè)數(shù)組,要求返回?cái)?shù)組的最大值和最大值首次出現(xiàn)的索引值。publicint
MaxValue(int[]array,outint
maxIndex){}publicclassTest{publicvoidMethod(outinti){i=10;}staticvoidMain(){Testt=newTest();intj;t.Method(outj);Console.WriteLine(j);}}
publicclassTest{publicstringOutParams(outstringname){stringstrName="張三";name=strName;string_strName="李四";return_strName;}publicstaticvoidMain(){Testt=newTest();stringstrName="王五";Console.WriteLine("調(diào)用前:{0}",strName);stringresult=t.OutParams(outstrName);Console.WriteLine("調(diào)用后:{0}",strName);Console.WriteLine("返回結(jié)果:{0}",result);Console.ReadKey();}}
5.4.2方法的參數(shù)
4.參數(shù)數(shù)組有時(shí)候,在調(diào)用一個(gè)方法時(shí),預(yù)先不能確定參數(shù)的數(shù)量、數(shù)據(jù)類型等,怎么辦呢?一種解決方案是使用params關(guān)鍵字。params關(guān)鍵字指明一個(gè)輸入?yún)?shù),此輸入?yún)?shù)將被看作為一個(gè)參數(shù)數(shù)組,這種類型的輸入?yún)?shù)只能作為方法的最后一個(gè)參數(shù)。以下例說明其功能。2023/11/2585C#程序設(shè)計(jì)實(shí)用教程
5.4.2方法的參數(shù)
【例5-17】使用參數(shù)數(shù)組。usingSystem;
namespaceParameterArray{publicclassStudent{publicstringstrName; //姓名publicint
nAge; //年齡publicSystem.Collections.ArrayList
strArrHobby=newSystem.Collections.ArrayList(); //愛好
2023/11/2586C#程序設(shè)計(jì)實(shí)用教程
5.4.2方法的參數(shù)
///<summary>///構(gòu)造函數(shù)///</summary>publicStudent(string_strName,int_nAge){
this.strName=_strName;
this.nAge=_nAge;}
///<summary>///為愛好賦值///</summary>publicvoidSetHobby(paramsstring[]_strArrHobby){for(inti=0;i<_strArrHobby.Length;i++)
this.strArrHobby.Add(_strArrHobby[i]);}}
2023/11/2587C#程序設(shè)計(jì)實(shí)用教程
5.4.2方法的參數(shù)
classTest{staticvoidMain(string[]args){Students=newStudent("張三",20);
s.SetHobby("游泳","籃球","足球");
for(inti=0;i<s.strArrHobby.Count;i++)
Console.WriteLine(s.strArrHobby[i]);}}}2023/11/2588C#程序設(shè)計(jì)實(shí)用教程
5.4.2方法的參數(shù)
程序的輸出結(jié)果如下:
游泳
籃球
足球注意:上例為Student類實(shí)現(xiàn)了一個(gè)愛好賦值方法,用于確定學(xué)生的愛好。因?yàn)閷?shí)現(xiàn)無法確定學(xué)生的愛好數(shù)目,因此可以使用params參數(shù)來接收多個(gè)字符串參數(shù),并整體作為數(shù)組傳遞給方法。2023/11/2589C#程序設(shè)計(jì)實(shí)用教程usingSystem;usingSystem.Collections;
namespaceOutputParameters{
publicclassS
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年重慶市民離婚協(xié)商一致合同樣本
- 2024經(jīng)營(yíng)合作合同范本
- 電熱鍋爐項(xiàng)目評(píng)價(jià)分析報(bào)告
- 復(fù)合膜裝配課程設(shè)計(jì)
- 基礎(chǔ)工程混凝土課程設(shè)計(jì)
- 2024解除勞動(dòng)合同提前多長(zhǎng)時(shí)間通知
- 2024簡(jiǎn)單裝修合同樣本大全
- 嬰兒尿布更換臺(tái)市場(chǎng)環(huán)境與對(duì)策分析
- 淺基礎(chǔ)基礎(chǔ)課程設(shè)計(jì)
- 2024年商用井鉆探建設(shè)協(xié)議樣本一
- 網(wǎng)絡(luò)故障分析報(bào)告模板
- DB37-T 5081-2024 住宅煙氣集中排放系統(tǒng)技術(shù)標(biāo)準(zhǔn)
- 審計(jì)報(bào)告成果驗(yàn)收方案
- 2024年社會(huì)工作實(shí)務(wù)(初級(jí))考試題及答案(含真題、典型題)
- 糖的還原作用實(shí)驗(yàn)報(bào)告
- 證券-印尼資本市場(chǎng)發(fā)展回顧與啟示
- 產(chǎn)業(yè)互聯(lián)網(wǎng)數(shù)據(jù)安全風(fēng)險(xiǎn)分析與防范策略
- 第五單元 15.“雜技小演員”嶺南版美術(shù)二年級(jí)上冊(cè)
- 肝病健康宣教內(nèi)容課件
- 智能合約在房地產(chǎn)交易中的應(yīng)用研究
- 新生兒肺炎課件
評(píng)論
0/150
提交評(píng)論