版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、案例2 教學(xué)管理軟件,案例簡(jiǎn)介,2,需求概述,在學(xué)校教務(wù)管理系統(tǒng)中,有三種用戶,一種是系統(tǒng)管理員,一種是學(xué)生,一種是教師,編寫(xiě)C#類實(shí)現(xiàn)該繼承關(guān)系。系統(tǒng)管理員/學(xué)生/教師都有用戶名和密碼屬性,并都有Login和顯示自身信息的方法,另外,學(xué)生擁有班級(jí)和成績(jī)兩個(gè)特殊屬性以及查詢成績(jī)這一方法,教師擁有部門和工資兩個(gè)特殊屬性以及查詢工資這一方法,系統(tǒng)管理員可以添加學(xué)生和教師信息。由于教師和學(xué)生個(gè)人信息不同,所以學(xué)生和教師重載基類的DisplayInfo方法。,3,需求分析,對(duì)于此類問(wèn)題,首先應(yīng)該抽象三類用戶共有的特征,在此基礎(chǔ)上,再派生普通類型的用戶,類關(guān)系圖如圖1所示。,圖1 繼承關(guān)系,4,實(shí)現(xiàn)過(guò)程
2、,1、創(chuàng)建控制臺(tái)應(yīng)用程序,命名為“SchoolManagement”。 2、創(chuàng)建名為User的基類,基類定義了userName和password屬性,以及Login和DisplayInfo方法。 3、創(chuàng)建名為“Student”的派生類,具備班級(jí)和成績(jī)兩個(gè)特殊屬性,以及查詢成績(jī)的特殊方法,覆蓋基類的顯示個(gè)人信息方法。 4、創(chuàng)建名為“Teacher”的派生類,具備部門和工資兩個(gè)特殊屬性,以及查詢工資的特殊方法,覆蓋基類的顯示個(gè)人信息方法。 5、創(chuàng)建名為“SysManager”的派生類,具備插入學(xué)生信息和插入教師信息兩個(gè)方法。 6、在“Program.cs”的“Main”方法中調(diào)用以上類,測(cè)試。,5
3、,結(jié)果演示,6,主要知識(shí)點(diǎn),類的聲明、類的成員、構(gòu)造函數(shù)和析構(gòu)函數(shù) 方法的聲明、方法的參數(shù)、靜態(tài)方法與實(shí)例方法、方法的覆蓋與重載 屬性 類的繼承與多態(tài) 接口,案例2 教學(xué)管理軟件,知識(shí)點(diǎn)詳解,面向?qū)ο缶幊趟枷?9,本章要點(diǎn),理解面向?qū)ο蟮闹匾?掌握類的概念 掌握對(duì)象的概念 掌握類的組成 掌握封裝的概念 掌握變量的作用域,10,面向?qū)ο蟾攀?問(wèn)題引入 大型軟件開(kāi)發(fā):類似騰訊QQ的聊天軟件 復(fù)雜的代碼功能如果都集中在一個(gè)Program.cs文件中是不現(xiàn)實(shí)的,需要對(duì)代碼進(jìn)行組織,將功能相近的代碼分類整合,從而便于代碼的管理和團(tuán)隊(duì)開(kāi)發(fā) 。,11,面向?qū)ο蟾攀?問(wèn)題引入 在C#程序設(shè)計(jì)中,按照問(wèn)題模型
4、特征以及施加在該模型上的操作,分類管理代碼的編程模式稱為面向?qū)ο蟮某绦蛟O(shè)計(jì)方法(OOP)。在需求分析和系統(tǒng)設(shè)計(jì)領(lǐng)域,還有面向?qū)ο蟮姆治?OOA)和面向?qū)ο蟮脑O(shè)計(jì)(OOD)等。面向?qū)ο蟮能浖_(kāi)發(fā)模式,是解決復(fù)雜且多變的客觀問(wèn)題的有效手段,也是從事軟件開(kāi)發(fā)工作的一項(xiàng)必備能力。,12,面向?qū)ο蟾攀?面向?qū)ο蟪绦蛟O(shè)計(jì) 在計(jì)算機(jī)世界中,將事物的特征稱為屬性,將事物的行為或施加在事物上的操作稱為方法,這種對(duì)求解問(wèn)題模型抽象其屬性和方法,分類編寫(xiě)代碼的開(kāi)發(fā)過(guò)程就是面向?qū)ο蟮某绦蛟O(shè)計(jì)(OOP)過(guò)程 類:具有相同的特征和行為的事物 對(duì)象:具體事務(wù),這些事物具有靜態(tài)的特征和動(dòng)態(tài)的行為,13,面向?qū)ο蟾攀?14,面
5、向?qū)ο蟾攀?面向?qū)ο蟪绦蛟O(shè)計(jì) 對(duì)象和類之間的關(guān)系是具體到抽象,特殊到一般的關(guān)系,15,面向?qū)ο蟾攀?程序設(shè)計(jì)的公式 程序=算法+數(shù)據(jù)結(jié)構(gòu) 程序=對(duì)象+對(duì)象間的消息傳遞 對(duì)象間的消息傳遞是指對(duì)象間的關(guān)聯(lián),16,類,在程序設(shè)計(jì)中,用類(class)來(lái)描述具有相同結(jié)構(gòu)和特征,以及相同的行為的一組對(duì)象,也可以把類看作對(duì)象的類型,把對(duì)象看作類的變量,從而對(duì)照前幾章的內(nèi)容來(lái)理解類,例如整型int,就是所有在一定的范圍內(nèi)的整數(shù)的集合,對(duì)于這些整數(shù)的操作必須是相同的。,17,類,1、C#中的命名慣例是類名的第一個(gè)字母大寫(xiě) 2、如果類名有多個(gè)單詞,則每個(gè)單詞的第一個(gè)字母大寫(xiě),類的聲明,18,類,類的封裝 通過(guò)訪
6、問(wèn)修飾符,C#實(shí)現(xiàn)了類的封裝思想 類的封裝是面向?qū)ο蟮奶卣髦?,通過(guò)封裝使一 部分成員充當(dāng)類與外部的接口,而將其他的成員隱蔽 起來(lái),這樣就達(dá)到了對(duì)成員訪問(wèn)權(quán)限的合理控制,使 不同類之間的相互影響減少到最低限度,進(jìn)而增強(qiáng)數(shù) 據(jù)的安全性和簡(jiǎn)化程序的編寫(xiě)工作。 例如:個(gè)人信息,有些可以公開(kāi),有些屬于隱私,19,類,類的封裝 訪問(wèn)修飾符,20,類和對(duì)象,21,類和對(duì)象,22,類的字段,字段: 在類中存儲(chǔ)信息的成員,23,字段的訪問(wèn)級(jí)別,類成員的默認(rèn)訪問(wèn)級(jí)別private,24,訪問(wèn)控制修飾符,25,訪問(wèn)控制修飾符,internal protected internal 當(dāng)父類和子類不在同一個(gè)程序集中時(shí)
7、, 子類不能訪問(wèn)父類的internal成員。,26,靜態(tài)字段,27,類的靜態(tài)字段,、,訪問(wèn)實(shí)例字段:car1.color=“Blue”; 訪問(wèn)靜態(tài)字段:Car.count=Car.count+1;,28,類的構(gòu)造函數(shù),29,類的構(gòu)造函數(shù),30,類的構(gòu)造函數(shù),類的構(gòu)造函數(shù): 執(zhí)行類和對(duì)象的初始化工作的方法。,31,類的構(gòu)造函數(shù)的重載,構(gòu)造函數(shù)是不返回值的。,32,構(gòu)造函數(shù)的調(diào)用,構(gòu)造函數(shù)是在產(chǎn)生一個(gè)類實(shí)例的時(shí)候,通過(guò)new來(lái)調(diào)用。,33,靜態(tài)構(gòu)造函數(shù)(static constructor),典型作用:當(dāng)類使用日志文件時(shí), 使用靜態(tài)構(gòu)造函數(shù)向日志文件寫(xiě)入項(xiàng)。,靜態(tài)構(gòu)造函數(shù)沒(méi)有訪問(wèn)級(jí)別修飾符,也沒(méi)有
8、參數(shù)。,34,靜態(tài)構(gòu)造函數(shù),當(dāng)類被加載時(shí),類的靜態(tài)構(gòu)造器會(huì)被自動(dòng)調(diào)用。 靜態(tài)構(gòu)造器是在類的靜態(tài)成員被使用之前執(zhí)行的。,35,靜態(tài)構(gòu)造函數(shù),當(dāng)有:A a=new A(); 先執(zhí)行類A的靜態(tài)構(gòu)造器,然后執(zhí)行類A的實(shí)例構(gòu)造器。 當(dāng)再有:A a1=new A(); 靜態(tài)構(gòu)造器最多只執(zhí)行一次。,36,靜態(tài)構(gòu)造函數(shù),37,語(yǔ)法形式: 屬性集信息 extern 標(biāo)識(shí)符 ( ) 析構(gòu)函數(shù)體 其中: 標(biāo)識(shí)符必須與類名相同,但為了區(qū)分構(gòu)造函數(shù),前面需加“”,表明它是析構(gòu)函數(shù)。關(guān)于析構(gòu)函數(shù),請(qǐng)注意: 析構(gòu)函數(shù)不能由程序顯式地調(diào)用,而是由系統(tǒng)在釋放對(duì)象時(shí)自動(dòng)調(diào)用。 如果對(duì)象是一個(gè)派生類對(duì)象,那么在調(diào)用析構(gòu)函數(shù)時(shí)也會(huì)產(chǎn)
9、生鏈?zhǔn)椒磻?yīng),首先執(zhí)行派生類的析構(gòu)函數(shù),然后執(zhí)行基類的析構(gòu)函數(shù),如果這個(gè)基類還有自己的基類,這個(gè)過(guò)程就會(huì)不斷重復(fù),直到調(diào)用Object類的析構(gòu)函數(shù)為止,其執(zhí)行順序正好與構(gòu)造函數(shù)相反。 析構(gòu)函數(shù)不能寫(xiě)返回類型,也不能帶參數(shù),因此它不可能被重載,當(dāng)然它也不能被繼承,所以一個(gè)類最多只能有一個(gè)析構(gòu)函數(shù)。,析構(gòu)函數(shù),38,析構(gòu)函數(shù),關(guān)于析構(gòu)函數(shù),請(qǐng)注意: 析構(gòu)函數(shù)不能由程序顯式地調(diào)用,而是由系統(tǒng)在釋放對(duì)象時(shí)自動(dòng)調(diào)用。 如果對(duì)象是一個(gè)派生類對(duì)象,那么在調(diào)用析構(gòu)函數(shù)時(shí)也會(huì)產(chǎn)生鏈?zhǔn)椒磻?yīng),首先執(zhí)行派生類的析構(gòu)函數(shù),然后執(zhí)行基類的析構(gòu)函數(shù),如果這個(gè)基類還有自己的基類,這個(gè)過(guò)程就會(huì)不斷重復(fù),直到調(diào)用Object類的析
10、構(gòu)函數(shù)為止,其執(zhí)行順序正好與構(gòu)造函數(shù)相反。,39,垃圾回收和析構(gòu)函數(shù),析構(gòu)函數(shù): 1、由C#中的垃圾回收器調(diào)用,垃圾回收器通過(guò)銷毀不再需要或不再被引用的對(duì)象來(lái)釋放內(nèi)存。 2、無(wú)任何參數(shù),也不返回值,函數(shù)名與類名相同,以開(kāi)頭。 3、析構(gòu)函數(shù)是自動(dòng)被調(diào)用的,當(dāng)任何代碼都不再可能使用一個(gè)實(shí)例時(shí),當(dāng)程序退出時(shí),都會(huì)調(diào)用析構(gòu)函數(shù)。 4、只應(yīng)該用來(lái)清理非托管資源,垃圾回收器會(huì)自動(dòng)清理托管資源。 5、析構(gòu)函數(shù)可以包含恰在對(duì)象銷毀前需要執(zhí)行的代碼(如關(guān)閉文件、保存狀態(tài)信息等)。 6、析構(gòu)函數(shù)實(shí)際上是對(duì)System.Object的虛方法Finalize的重寫(xiě),c#不允許重寫(xiě)此方法或直接調(diào)用它(或它的重寫(xiě))。,4
11、0,垃圾回收器,垃圾回收器的工作原理: 如果為定義析構(gòu)函數(shù)的對(duì)象分配了內(nèi)存,運(yùn)行庫(kù)將把該對(duì)象添加到需要銷毀的對(duì)象的列表中。 垃圾回收器定期檢查有沒(méi)有不再被引用的對(duì)象, 如果找到了其名稱沒(méi)有列在銷毀器列表中的對(duì)象,就立即清除該對(duì)象。 完成垃圾回收后,將調(diào)用銷毀器線程,該線程調(diào)用有標(biāo)記為“準(zhǔn)備銷毀”的對(duì)象的銷毀方法(析構(gòu)函數(shù))。 對(duì)象銷毀過(guò)程發(fā)生后,就將該對(duì)象從需要銷毀的對(duì)象列表中刪除。 因?yàn)樵搶?duì)象沒(méi)有被引用,也沒(méi)有列在銷毀器列表中,所以下次進(jìn)行垃圾回收時(shí)就會(huì)將它清除。,41,析構(gòu)函數(shù),public class Person string name; public Person(string my
12、name) name = myname; public string Name get return name; set name = value; Person() StreamWriter sr = new StreamWriter(d:人員信息.txt, true); sr.WriteLine(this.Name); sr.Close(); ,42,析構(gòu)函數(shù),1、當(dāng)不再需要某對(duì)象時(shí),CLR調(diào)用該對(duì)象的析構(gòu)函數(shù),然 后釋放其內(nèi)存,析構(gòu)函數(shù)執(zhí)行清理任務(wù),如保存狀態(tài)信息、關(guān) 閉文件和數(shù)據(jù)庫(kù)的連接,以及執(zhí)行在釋放對(duì)象前必須完成的其 它任務(wù)。 2、調(diào)用析構(gòu)函數(shù)的時(shí)間是不確定的,在對(duì)象喪失范圍和系統(tǒng)
13、 自動(dòng)調(diào)用析構(gòu)函數(shù)之間通常會(huì)有延遲。 3、應(yīng)用程序終止之前一定會(huì)調(diào)用析構(gòu)函數(shù)。 4、基類的析構(gòu)函數(shù)是不能被繼承的,若派生類需要析構(gòu)函數(shù),必須在派生類中聲明它。 5、析構(gòu)函數(shù)首先從最相近派生的類開(kāi)始運(yùn)行,最后執(zhí)行基類中的代碼。,43,析構(gòu)函數(shù),class Employee:Person string id; public Employee (string name ,string id):base(name ) this .ID=id ; public string ID get return id ; set id =value ; Employee () SaveStateInfo1();
14、protected void SaveStateInfo1() StreamWriter sr; sr = new StreamWriter(D: 人員信息.txt , true); sr.WriteLine(this.ID); sr.Close(); ,Employee e1 = new Employee(Tom, 010203);,44,創(chuàng)建程序集,程序集是任何 .NET Framework 應(yīng)用程序的基本構(gòu)造塊。 例如,在生成簡(jiǎn)單的 C# 應(yīng)用程序時(shí),Visual Studio 創(chuàng)建一個(gè) 單個(gè)可移植可執(zhí)行 (PE) 文件形式的程序集,明確地說(shuō)就是一個(gè) EXE 或 DLL。,1、創(chuàng)建具有
15、.exe 擴(kuò)展名的程序集并指定輸出文件名 從名為 myCode 的代碼模塊創(chuàng)建名為 myAssembly.exe 的 程序集 csc /out:myAssembly.exe myCode.cs,2、創(chuàng)建庫(kù)程序集 庫(kù)程序集與類庫(kù)相似。它包含將由其他程序集引用的類型,但沒(méi)有開(kāi)始執(zhí)行的入口點(diǎn)。 csc /out:myCodeLibrary.dll /t:library myCode.cs 從名為 myCode 的代碼模塊創(chuàng)建名為 myCodeAssembly.dll 的庫(kù)程序集。,45,46,類的方法,47,類的方法,48,類的方法,方法: 描述一個(gè)對(duì)象的動(dòng)作。,調(diào)用方法: Car car1=new
16、 Car(); car1.Run();,49,方法的訪問(wèn)修飾符,50,方法的返回值,如果說(shuō)參數(shù)是方法的”輸入“, 那么返回值就是方法的”輸出“。,Console.WriteLine(car1的重量是 + car1.GetWeight() + 噸);,51,52,方法的參數(shù)傳遞類型,53,值傳遞、引用傳遞和ref參數(shù),參數(shù)傳遞: 1、值傳遞:實(shí)參將值拷貝給形參,系統(tǒng)要為形參開(kāi)設(shè)存儲(chǔ)空間,以接受傳遞的值,此時(shí)形參成為一個(gè)實(shí)在的局部變量,從此實(shí)參和形參脫離關(guān)系,形參在方法中參與運(yùn)算,在運(yùn)算中的發(fā)生的任何變化都不會(huì)影響實(shí)參; 2、引用傳遞:實(shí)參將自己的引用,也就是自己數(shù)據(jù)在存儲(chǔ)器中的地址拷貝給形參,這
17、時(shí)形參如同實(shí)參的別名,系統(tǒng)不必為形參開(kāi)設(shè)存儲(chǔ)空間,形參在方法中的任何改變就是實(shí)參的改變,所以引用參數(shù)既是方法的輸入,又是方法的輸出,引用傳遞的形參需要用ref關(guān)鍵字聲明,調(diào)用方法時(shí)的實(shí)參也要添加ref關(guān)鍵字。 3、對(duì)于屬性、事x件、索引器和用戶定義的運(yùn)算符來(lái)說(shuō),它們的參數(shù)總是作為值參數(shù)傳遞的。這些成員類別不支持引用參數(shù)和輸出參數(shù)(out)。,54,值傳遞、引用傳遞和ref參數(shù),C#的數(shù)據(jù)類型有值類型和引用類型兩種,所以參數(shù)傳遞時(shí),在形式上有四種情況: 1、值類型參數(shù)進(jìn)行值傳遞 2、引用類型參數(shù)進(jìn)行值傳遞 3、值類型參數(shù)進(jìn)行引用傳遞 4、引用類型參數(shù)進(jìn)行引用傳遞,55,out參數(shù),一般情況下,一
18、個(gè)方法只有一個(gè)返回值,返回?cái)?shù)據(jù)是一種輸出的方式,ref修飾的參數(shù),或者是引用類型參數(shù),它們既是輸入,又是輸出,out參數(shù)提供了更靈活的輸出方式。 out參數(shù)也稱為輸出參數(shù)。和ref參數(shù)類似,用out修飾的參數(shù),直接將引用傳遞給方法,不在存儲(chǔ)器中為參數(shù)開(kāi)設(shè)新的空間,但是,和ref參數(shù)不一樣,調(diào)用方法前并不需要對(duì)參數(shù)作初始化,正因?yàn)槿绱?,在out參數(shù)沒(méi)有被顯式賦值之前,不能使用,在方法結(jié)束前應(yīng)該對(duì)out參數(shù)賦值。 調(diào)用方法時(shí),也要用out修飾實(shí)參,并且實(shí)參必須是變量,不能是屬性、表達(dá)式。 out參數(shù)可以用在實(shí)例方法、靜態(tài)方法和實(shí)例構(gòu)造函數(shù)中,不能用在屬性和索引器中。,56,向方法傳遞可變數(shù)量的參數(shù)
19、,57,params參數(shù),一般情況下,方法的輸入是通過(guò)參數(shù)列表規(guī)定的,輸入?yún)?shù)的個(gè)數(shù)不能隨著實(shí)際調(diào)用的需要而改變,params參數(shù)則提供了這樣一種方便,例如,有n組數(shù)據(jù),每一組數(shù)據(jù)個(gè)數(shù)都不一樣,但都要求平均數(shù),在C#中,借助params參數(shù),只要定義一個(gè)方法就可以完成這樣的靈活功能。 params參數(shù)也稱為參數(shù)數(shù)組。params參數(shù)是具有一維數(shù)組性質(zhì)的數(shù)組類型的參數(shù),例如一維數(shù)組,或者交錯(cuò)數(shù)組,但不能是多維數(shù)組; params參數(shù)實(shí)際上是不定長(zhǎng)的數(shù)組,定義形參時(shí)要使用params關(guān)鍵字,不需要指定長(zhǎng)度,在調(diào)用時(shí),實(shí)參不需要用params關(guān)鍵字,實(shí)參可以是任意個(gè)數(shù)的元素,也可以是一個(gè)同類型的數(shù)組
20、。 params參數(shù)只能作為參數(shù)列表的最后一個(gè)參數(shù)。 params參數(shù)不能再用ref或out修飾。,58,值參數(shù)的傳遞,59,引用參數(shù)的傳遞,60,輸出參數(shù)的傳遞,61,輸出參數(shù)和引用參數(shù)的區(qū)別,62,方法的參數(shù),參數(shù)的傳入或傳出就是在實(shí)參與形參之間發(fā)生的, 在C#中實(shí)參與形參有4種傳遞方式。 1值參數(shù) 在方法聲明時(shí)不加修飾的形參就是值參數(shù),它表明實(shí)參與形參之間按值傳遞。這種傳遞方式的好處是,在方法中對(duì)形參的修改不影響外部的實(shí)參,也就是說(shuō),數(shù)據(jù)只能傳入方法而不能從方法傳出,所以值參數(shù)有時(shí)也被稱為入?yún)?shù)。,63,using System; class Myclass public void So
21、rt (int x, int y, int z) int tmp; / tmp是方法Sort的局部變量 / 將x, y, z按從小到大排序 if (xy) tmp=x; x=y; y=tmp; if (xz) tmp=x; x=z; z=tmp; if (yz) tmp=y; y=z; z=tmp; ,class Test static void Main() Myclass m = new Myclass ( ); int a, b, c; a=30; b=20; c=10; m.Sort (a, b, c); Console.WriteLine (a=0, b=1, c=2 , a, b,
22、 c ); Console.Read (); ,【例3.7】 下面的程序演示了當(dāng)方法Sort傳遞的是值參數(shù)時(shí),對(duì)形參的修改不影響其實(shí)參。,方法的參數(shù),64,方法的參數(shù),a、b、c 變量的值并沒(méi)有發(fā)生改變,因?yàn)樗鼈兌际前粗祩鹘o形參x、y、z的,形參x、y、z的變化并不影響外部a、b、c的值。 但如果給方法傳遞的是一個(gè)引用對(duì)象時(shí),它遵循的仍是值參數(shù)傳遞方式,形參另外分配一塊內(nèi)存,接受實(shí)參的引用值副本,同樣對(duì)引用值的修改不會(huì)影響外面的實(shí)參。但是,如果改變參數(shù)所引用的對(duì)象將會(huì)影響實(shí)參所引用的對(duì)象,事實(shí)上,它們是同一塊內(nèi)存區(qū)域。,65,【例3.8】 下面程序演示的是當(dāng)方法傳遞的是一個(gè)引用對(duì)象(如數(shù)組)時(shí)
23、,對(duì)形參的修改會(huì)影響到實(shí)參。,方法的參數(shù),using System; class Myclass public void SortArray (int a) int i, j, pos,tmp; for (i=0; ia j) pos=j; if (pos != i ) tmp=ai; ai=apos; apos=tmp; ,66,方法的參數(shù),class Test static void Main() Myclass m = new Myclass ( ); int score = 87,89,56,90,100,75,64,45, 80, 84 ; m.SortArray(score); f
24、or ( int i=0; iscore.Length; i+) Console.Write (score0=1, , i , scorei ); if (i=4) Console.WriteLine (); Console.Read (); ,67,方法的參數(shù),2. 引用參數(shù) 如果調(diào)用一個(gè)方法,期望能夠?qū)鬟f給它的實(shí)際變量進(jìn)行 操作,如下面例3.9中Sort方法對(duì)x、y、z 的排序希望對(duì)調(diào) 用這個(gè)方法的實(shí)際變量a、b、c產(chǎn)生作用,如前所見(jiàn),用C# 默認(rèn)的按值傳遞是不可能實(shí)現(xiàn)的。所以C#用ref修飾符來(lái)解 決此類問(wèn)題,它告訴編譯器,實(shí)參與形參的傳遞方式是引用。 引用與值參數(shù)不同,引用參數(shù)并不創(chuàng)
25、建新的存儲(chǔ)單元,它 與方法調(diào)用中的實(shí)在參數(shù)變量同處一個(gè)存儲(chǔ)單元。因此,在方 法內(nèi)對(duì)形參的修改就是對(duì)外部實(shí)參變量的修改。,68,【例3.9】 將例3.7程序中Sort方法的值參數(shù)傳遞方式改成引用參數(shù)傳遞,這樣在方法Sort中對(duì)參數(shù)x、y、z按從小到大的排序影響了調(diào)用它的實(shí)參a、b、c。,方法的參數(shù),using System; class Myclass public void Sort (ref int x, ref int y, ref int z) int tmp; / tmp是方法Sort的局部變量 / 將x, y, z按從小到大排序 if (xy) tmp=x; x=y; y=tmp;
26、if (xz) tmp=x; x=z; z=tmp; if (yz) tmp=y; y=z; z=tmp; ,69,方法的參數(shù),class Test static void Main() Myclass m = new Myclass ( ); int a, b, c; a=30; b=20; c=10; m.Sort (ref a, ref b, ref c); Console.WriteLine (a=0, b=1, c=2 , a, b, c ); Console.Read(); ,70,方法的參數(shù),使用ref時(shí)請(qǐng)注意: (1)ref關(guān)鍵字僅對(duì)跟在它后面的參數(shù)有效,而不能應(yīng)用于整個(gè)參數(shù)表
27、。例如,Sort方法中x、y、z都要加ref修飾。 (2)在調(diào)用方法時(shí),也用ref修飾實(shí)參變量,因?yàn)槭且脜?shù),所以要求實(shí)參與形參的數(shù)據(jù)類型必須完全匹配,而且實(shí)參必須是變量,不能是常量或表達(dá)式。 (3)在方法外,ref參數(shù)必須在調(diào)用之前明確賦值,在方法內(nèi),ref參數(shù)被視為已賦過(guò)初始值。,71,方法的參數(shù),3. 輸出參數(shù) 在參數(shù)前加out修飾符的被稱為輸出參數(shù),它與ref參數(shù)相似,只有一點(diǎn)除外,就是它只能用于從方法中傳出值,而不能從方法調(diào)用處接受實(shí)參數(shù)據(jù)。在方法內(nèi)out參數(shù)被認(rèn)為是未賦過(guò)值的,所以在方法結(jié)束之前應(yīng)該對(duì)out參數(shù)賦值。,72,【例3.10】 求一個(gè)數(shù)組中元素的最大值、最小值和平均值
28、。,方法的參數(shù),using System; class Myclass public void MaxMinArray (int a, out int max, out int min, out double avg ) int sum ; sum = max = min = a0 ; for (int i=1; imax) max=ai; if (aimin) min=ai; sum+=ai; avg=sum / a.Length; ,73,方法的參數(shù),class Test static void Main() Myclass m = new Myclass ( ); int score =
29、 87,89,56,90,100,75,64,45, 80, 84 ; int smax, smin; double savg; m.MaxMinArray(score, out smax, out smin, out savg); Console.Write (Max=0, Min=1, Avg=2 , smax, smin, savg ); Console.Read (); ,74,方法的參數(shù),ref和out參數(shù)的使用并不局限于值類型參數(shù),它們也可用 于引用類型來(lái)傳遞對(duì)象。 【例3.11】 下面程序定義了兩個(gè)方法,一個(gè)是Swap1,一 個(gè)是Swap2,它們都有兩個(gè)引用對(duì)象作為參數(shù),但Swa
30、p2 的參數(shù)加了ref修飾,調(diào)用這兩個(gè)方法產(chǎn)生的結(jié)果是不一樣的。,75,方法的參數(shù),using System; class Myclass public void Swap1 (string s, string t) string tmp; tmp=s; s=t; t=tmp; public void Swap2 (ref string s, ref string t) string tmp; tmp=s; s=t; t=tmp; class Test static void Main() ,76,方法的參數(shù),Myclass m = new Myclass ( ); string s1=ABC
31、DEFG, s2=134567; m.Swap1(s1,s2); Console.WriteLine (s1=0 , s1 ); / s1,s2的引用并沒(méi)有改變 Console.WriteLine (s2=0 , s2 ); m.Swap2(ref s1, ref s2); / s1,s2的引用互相交換了 Console.WriteLine (s1=0 , s1 ); Console.WriteLine (s2=0 , s2 ); Console.Read (); ,77,方法的參數(shù),4參數(shù)數(shù)組 一般而言,調(diào)用方法時(shí)其實(shí)參必須與該方法聲明的形參在類型和數(shù)量上相匹配,但有時(shí)候我們更希望靈活一些,
32、C#提供了傳遞可變長(zhǎng)度參數(shù)表的機(jī)制,使用params關(guān)鍵字來(lái)指定一個(gè)可變長(zhǎng)的參數(shù)表。 【例3.12】 下面程序演示了Myclass類中的方法MaxMin 有一個(gè)參數(shù)數(shù)組類型的參數(shù),在調(diào)用這個(gè)方法時(shí)具有靈活性。,78,方法的參數(shù),using System; class Myclass public void MaxMin (out int max, out int min, params int a ) if (a.Length=0) / 如果可變參數(shù)為零個(gè),可以取一個(gè)約定值或產(chǎn)生異常 max=min=1; return ; max = min = a0 ; for (int i=1; imax
33、) max=ai; if (aimin) min=ai; ,79,方法的參數(shù),class Test static void Main() Myclass m = new Myclass ( ); int score = 87,89,56,90,100,75,64,45, 80, 84 ; int smax, smin; m.MaxMin (out smax, out smin);/ 可變參數(shù)的個(gè)數(shù)可以是零個(gè) Console.WriteLine (Max=0, Min=1 , smax, smin ); m.MaxMin (out smax, out smin, 45, 76, 89, 90 )
34、; / 在4個(gè)數(shù)之間找最大、最小 Console.WriteLine (Max=0, Min=1 , smax, smin ); m.MaxMin (out smax, out smin, score); / 可變參數(shù)也可接受數(shù)組對(duì)象 Console.WriteLine (Max=0, Min=1 , smax, smin ); Console.Read (); ,80,C#的優(yōu)勢(shì),作為編程語(yǔ)言,C#是現(xiàn)代的、簡(jiǎn)單的、完全面向?qū)ο蟮?,而且是類型安全的。重要的是,C#是一種現(xiàn)代編程語(yǔ)言。在類、名字空間、方法重載和異常處理等方面,C#去掉了C+中的許多復(fù)雜性,借鑒和修改了Java的許多特性,使其更
35、加易于使用,不易出錯(cuò)。 下面列舉了一些C#在設(shè)計(jì)上的優(yōu)點(diǎn):,81,方法的參數(shù),【例3.12】 下面程序演示了Myclass類中的方法MaxMin有一個(gè)參數(shù)數(shù)組類型的參數(shù),在調(diào)用這個(gè)方法時(shí)具有靈活性。,82,方法的參數(shù),using System; class Myclass public void MaxMin (out int max, out int min, params int a ) if (a.Length=0) / 如果可變參數(shù)為零個(gè),可以取一個(gè)約定值或產(chǎn)生異常 max=min=1; return ; max = min = a0 ; for (int i=1; imax) max
36、=ai; if (aimin) min=ai; ,83,方法的參數(shù),class Test static void Main() Myclass m = new Myclass ( ); int score = 87,89,56,90,100,75,64,45, 80, 84 ; int smax, smin; m.MaxMin (out smax, out smin); / 可變參數(shù)的個(gè)數(shù)可以是零個(gè) Console.WriteLine (Max=0, Min=1 , smax, smin ); m.MaxMin (out smax, out smin, 45, 76, 89, 90 ); /
37、在4個(gè)數(shù)之間找最大、最小 Console.WriteLine (Max=0, Min=1 , smax, smin ); m.MaxMin (out smax, out smin, score); / 可變參數(shù)也可接受數(shù)組對(duì)象 Console.WriteLine (Max=0, Min=1 , smax, smin ); Console.Read (); ,84,cashRegister Candy = new cashRegister (200, 1); cashRegister Chips = new cashRegister (500,3.5); Candy.makeSale (5);
38、Console.Write (Candy.numItems=0 , CductCount (); / 調(diào)用實(shí)例方法與對(duì)象Candy相關(guān)聯(lián) Console.WriteLine (cashSum=0 , cashRductCost() ); / 調(diào)用靜態(tài)方法與類cashRegister相關(guān)聯(lián) Chips.makeSale (10); Console.Write (Chips.numItems=0 , CductCount() ); / 調(diào)用實(shí)例方法與對(duì)象Chips相關(guān)聯(lián) Console.WriteLine (cashSum=0 , cashRe
39、ductCost() ); / cashSum計(jì)Candy和Chips售出總價(jià) Console.Read (); ,方法的參數(shù),85,方法的參數(shù),在上面的程序中可以看到,實(shí)例方法makeSale() 中可以使用this來(lái)引用變量numItems。 這里this關(guān)鍵字表示引用當(dāng)前對(duì)象實(shí)例的成員。在實(shí)例方 法體內(nèi)也可以省略this,直接引用numItems,實(shí)際上兩者 的語(yǔ)義相同。而靜態(tài)方法不與對(duì)象關(guān)聯(lián),理所當(dāng)然地不能用 this指針。this關(guān)鍵字一般用于實(shí)例構(gòu)造函數(shù)、實(shí)例方法和 實(shí)例訪問(wèn)器,以訪問(wèn)對(duì)象實(shí)例的成員。,86,87,實(shí)例方法和靜態(tài)方法,一個(gè)類的方法代碼只有一份,它
40、們的生命期和類是一致的,所謂的實(shí)例方法是指通過(guò)對(duì)象名調(diào)用的方法,靜態(tài)方法與類關(guān)聯(lián),而不是與對(duì)象關(guān)聯(lián),定義靜態(tài)方法時(shí)要使用static關(guān)鍵字,調(diào)用靜態(tài)方法時(shí)要使用類名,而不是對(duì)象名。靜態(tài)方法不能直接訪問(wèn)非靜態(tài)的字段,靜態(tài)字段可以被所有方法所訪問(wèn)。 方法由方法頭和方法體兩部分組成,定義格式如下: 修飾符 返回類型 方法名 (參數(shù)列表) 方法體 定義靜態(tài)方法的格式為: 修飾符 static 返回類型 方法名 (參數(shù)列表) 方法體,88,Main方法,Main方法是C#程序的入口,必須定義在某一個(gè)類中,通常定義一個(gè)專門管理Main方法的類,雖然原則上也可以把Main方法定義在其它類中,并且不影響編譯時(shí)
41、的程序邏輯。作為程序入口的Main方法,必須是public和static的。 Main方法常使用以下兩種形式: public static void Main() public static void Main(string args) 第二種形式種的參數(shù),稱為命令行參數(shù),命令行參數(shù)是一個(gè)字符串?dāng)?shù)組,使用命令行參數(shù)可以增加運(yùn)行程序的靈活性。,89,靜態(tài)方法,使用方法:類名.靜態(tài)方法名 不管類生成對(duì)象與否,類的靜態(tài)方法都可以被使用,實(shí)例方法則在類創(chuàng)建對(duì)象后,才能被使用: 對(duì)象名.實(shí)例方法名 可以使用該方法所在類的所有靜態(tài)成員和實(shí)例成員,90,using System; public class
42、UseMethod private static int x=0; /靜態(tài)字段 private int y=1; /實(shí)例字段 public static void StaticMethod() /靜態(tài)方法 x=10; /正確,靜態(tài)方法訪問(wèn)靜態(tài)數(shù)據(jù)成員 y=20; /錯(cuò)誤,靜態(tài)方法不能訪問(wèn)實(shí)例數(shù)據(jù)成員 public void NoStaticMethod() /實(shí)例方法 x=10;/正確,實(shí)例方法訪問(wèn)靜態(tài)數(shù)據(jù)成員 y=20;/正確,實(shí)例方法訪問(wèn)實(shí)例數(shù)據(jù)成員 ,靜態(tài)方法與實(shí)例方法,91,public class Class1 public static void Main() UseMethod
43、m=new UseMethod(); /使用靜態(tài)方法格式為:類名.靜態(tài)方法名 UseMethod.StaticMethod(); /使用實(shí)例方法格式為:對(duì)象名.實(shí)例方法名 m.NoStaticMethod(); ,靜態(tài)方法與實(shí)例方法,92,93,方法的重載,C#中方法參數(shù)個(gè)數(shù)和類型的不同稱為方法的“簽名”。,方法的重載編寫(xiě)名字相同而簽名不同的方法,94,方法的重載,C#根據(jù)參數(shù)類型,而不是參數(shù)名稱識(shí)別簽名。,非法重載,95,方法重載,car1.Run(); car1.Run(51號(hào)); car1.Run(100);,調(diào)用哪個(gè)版本最合適, 由編譯器處理。,96,97,類的屬性,98,屬性的引入,
44、網(wǎng)站新用戶注冊(cè):,如果有zs.sex=“好“;會(huì)怎么樣呢?,使用zs.SetSex(“男”); 為性別賦值,99,屬性的引入,100,類的屬性簡(jiǎn)介,class Employee private static string _name; private static string _id; static void Main(string args) _name = Console.ReadLine(); _id = Console.ReadLine(); ,直接訪問(wèn)字段 不經(jīng)驗(yàn)證,101,類的屬性簡(jiǎn)介,class Employee private static string _name; pri
45、vate static string _id; public void SetId(value) / 驗(yàn)證輸入長(zhǎng)度小于 2 if (_id.Length 2) _id = value; public string GetId() return _id; ,方法 SetId(Value) 和 GetId() 分別讀取和寫(xiě)入職員 ID, Employee emp; emp.SetId(A1); string Department = emp.Get() ,每次都調(diào)用 GetId() 和 SetId() 方法會(huì)很繁瑣,屬性,102,類的屬性簡(jiǎn)介,class Employee private stat
46、ic string _name; private static string _id; public string Id get return _id; set / 驗(yàn)證輸入長(zhǎng)度小于 2 if (_id.Length 2) _id = value; ,讀取 ID 時(shí)調(diào)用,將值賦給 ID 時(shí)調(diào)用,103,類的屬性類型1,訪問(wèn)修飾符 數(shù)據(jù)類型 屬性名 get ; set ; ,讀/寫(xiě)屬性,可以賦值和檢索值,104,類的屬性類型2,訪問(wèn)修飾符 數(shù)據(jù)類型 屬性名 get ; ,只讀屬性,只能檢索值,105,類的屬性類型3,訪問(wèn)修飾符 數(shù)據(jù)類型 屬性名 set ; ,只寫(xiě)屬性,只能賦值,106,類的屬性
47、類型4,訪問(wèn)修飾符static 數(shù)據(jù)類型 屬性名 get; set; ,靜態(tài)屬性,應(yīng)用于整個(gè)類而不是類的實(shí)例,只能訪問(wèn)類的靜態(tài)成員,107,類的屬性,value關(guān)鍵字:表示對(duì)屬性進(jìn)行寫(xiě)操作時(shí)提供的參數(shù)。,get定義屬性的讀操作 set定義屬性的寫(xiě)操作,108,屬性與字段,1、對(duì)于屬性,可以提供get方法以支持讀,set方法以支持寫(xiě),也可以不提供。,109,屬性與字段,2、屬性擁有一些方法的特征,可以達(dá)到直接讀寫(xiě)字段無(wú)法達(dá)到的效果。,110,類的索引器,Console.WriteLine(car1的第一個(gè)輪子是:0, car10); / car1的第一個(gè)輪子是:左前輪,111,類的索引器,thi
48、s關(guān)鍵字表示這是一個(gè)索引器,索引參數(shù)可以是任意類型,Console.WriteLine(“car1的左前輪是第0個(gè)輪子, car1“右前輪”); / car1的左前輪是第0個(gè)輪子,112,索引器,訪問(wèn)修飾符 數(shù)據(jù)類型 this數(shù)據(jù)類型 標(biāo)識(shí)符 get; set; ,語(yǔ)法格式:,索引器是一種語(yǔ)法上的公用程序,它可以讓一個(gè)對(duì)象像數(shù)組一樣被索引; 索引器訪問(wèn)被對(duì)象封裝的集合或數(shù)組元素的語(yǔ)法直觀易懂,它可以讓一個(gè)對(duì)象像數(shù)組一樣被索引。,113,索引器與屬性,114,屬性,引入:封裝的主要應(yīng)用就是實(shí)現(xiàn)類字段的存取控制, 在一般情況下,我們將類的特征設(shè)置為私有字段,然 后通過(guò)getXXX(),setXXX
49、()的形式來(lái)獲取或設(shè)置 字段的值,public class Human public string name; public string getName() return name; public void setName(string name) = name; ,115,屬性,C#的實(shí)現(xiàn):為了簡(jiǎn)化Get和Set操作,同時(shí)為了照顧VB和 Delphi程序員的編碼習(xí)慣,C#提出了屬性的概念,在寫(xiě)法 上更加簡(jiǎn)化 在get和set的大括號(hào)之間,可以添加多條語(yǔ)句 。,public class Human public string name; public string Nam
50、e get return name; set name = value; ,116,117,綜合應(yīng)用實(shí)例,【例3.19】 學(xué)生成績(jī)管理程序。 根據(jù)學(xué)生選修的課程及課程學(xué)分和課程成績(jī)計(jì)算GPA,最 后按GPA的值對(duì)學(xué)生進(jìn)行排序。 基本思路:本程序的學(xué)生總?cè)藬?shù)、課程名、課程學(xué)分可以由 控制臺(tái)輸入,為敘述簡(jiǎn)單,假定每個(gè)學(xué)生所選修的課程相同。 Course類定義了課程名、課程學(xué)分字段域,并使用屬性公 開(kāi)私有字段。另外,Course類還定義了Name屬性、構(gòu)造函 數(shù)。 Course類代碼如下:,118,學(xué)生成績(jī)管理程序,class Course string courseName; / 課程名 int
51、courseMark; / 課程學(xué)分 public Course() public Course(string Name, int Mark) courseName=Name; courseMark=Mark; public string Name / Name屬性,課程名可讀可寫(xiě) get return courseName; set courseName=value; ,119,學(xué)生成績(jī)管理程序,public int Mark / Mark屬性,課程學(xué)分可讀可寫(xiě) get return courseMark; set courseMark=value; ,120,學(xué)生成績(jī)管理程序,Studen
52、t類定義學(xué)生姓名、學(xué)號(hào)、選修課程數(shù)、Course 類、成績(jī)及GPA等字段,并使屬性公開(kāi)(public)。假定選 修課程一樣,所以將課程數(shù)、Course類對(duì)象定義為static字 段,不需要每個(gè)學(xué)生都有這份數(shù)據(jù)副本。 Student類還定義了CourseNum靜態(tài)屬性、GPA屬性、 Name屬性,SetCourse方法,用于設(shè)置課程名,因?yàn)椴恍?要為每個(gè)學(xué)生設(shè)置,所以定義成靜態(tài)方法。AddData屬性給 每個(gè)學(xué)生加入姓名、學(xué)號(hào)、成績(jī)。ComputeGPA 方法計(jì)算 學(xué)生成績(jī)的GPA。stuSwap方法對(duì)兩個(gè)Student對(duì)象內(nèi)容 進(jìn)行交換。 Student類的代碼如下:,121,學(xué)生成績(jī)管理程序
53、,class Student string stuName; / 學(xué)生姓名 string stuID; / 學(xué)生學(xué)號(hào) static int numberOfCourse; / 加static修飾符表明這個(gè)域?yàn)樗袑W(xué)生類對(duì)象共享 static Course list ; / Course類對(duì)象數(shù)組,用于設(shè)置每門課程名、課程學(xué)分 int stuScore; / 每個(gè)學(xué)生對(duì)象要填寫(xiě)的各課程成績(jī) double stuGPA; / GPA值 public Student() / 當(dāng)?shù)谝淮蝿?chuàng)建Student對(duì)象時(shí),創(chuàng)建list對(duì)象數(shù)組,并初始化 list=new CoursenumberOfCourse;
54、 for (int i=0; inumberOfCourse;i+) listi=new Course(); stuScore=new intnumberOfCourse; ,122,/ 將CourseNum定義成靜態(tài)屬性是因?yàn)樗粚?duì)靜態(tài)域進(jìn)行操作 public static int CourseNum get return numberOfCourse; set numberOfCourse=value; public double GPA / GPA屬性是只讀屬性 get return stuGPA; public string Name / Name屬性可讀可寫(xiě) get return s
55、tuName; set stuName=value; ,學(xué)生成績(jī)管理程序,123,學(xué)生成績(jī)管理程序,/ 將SetCourse設(shè)為靜態(tài)方法,是因?yàn)樗鼉H訪問(wèn)靜態(tài)數(shù)據(jù)域 / 不需要?jiǎng)?chuàng)建Student類對(duì)象就可直接用Student類名調(diào)用 / 它的形參是一個(gè)參數(shù)數(shù)組,這樣調(diào)用時(shí)就可根據(jù)實(shí)際選修的課程數(shù)來(lái)設(shè)置 public static void SetCourse(params Course topic) for (int i=0; itopic.Length ; i+) listi.Name =topici.Name; listi.Mark =topici.Mark; / AddData方法將一個(gè)學(xué)
56、生的數(shù)據(jù)添加到學(xué)生類對(duì)象數(shù)組中 public void AddData(string name,string Id,int score) stuName=name; stuID=Id; for (int i=0;iscore.Length; i+) stuScorei=scorei; ,124,學(xué)生成績(jī)管理程序,public void ComputeGPA() / 根據(jù)課程的學(xué)分以及學(xué)生成績(jī)計(jì)算GPA int i; double sMark, sumMark=0, sumGP=0; for (i=0;i=95) sMark=4.5; else if (stuScorei=90) sMark=4
57、; else if (stuScorei=85) sMark=3.5;,125,else if (stuScorei=80) sMark=3; else if (stuScorei=75) sMark=2.5; else if (stuScorei=70) sMark=2; else if (stuScorei=65) sMark=1.5; else if (stuScorei=60) sMark=1; else sMark=0; sumGP+=listi.Mark*sMark; sumMark+=listi.Mark; stuGPA=sumGP/sumMark; / stuSwap方法提供兩
58、個(gè)Student類對(duì)象的交換操作,注意它們的形參被修飾為ref,學(xué)生成績(jī)管理程序,126,學(xué)生成績(jī)管理程序,public void stuSwap(ref Student stu1, ref Student stu2) string name,Id; int i; int score=new int Student.CourseNum; double gpa; name=stu1.Name; Id=stu1.stuID; gpa=stu1.GPA; for (i=0;iStudent.CourseNum;i+) scorei=stu1.stuScorei; stu1.stuName=stu2.stuName; stu1.stuID=stu2.stuID; stu1.stuGPA=stu2.stuGPA; for (i=0;iStudent.CourseNum;i+) stu1.stuScorei=stu2.stuScorei; stu2.stuName=name; stu2.stuID=Id; stu2.s
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 揚(yáng)塵治理委托協(xié)議模板
- 2025年度文化創(chuàng)意產(chǎn)品開(kāi)發(fā)合作協(xié)議范本3篇
- 2025版外債借款合同法律框架與政策背景分析3篇
- 2025年銷售薪資與銷售團(tuán)隊(duì)建設(shè)合同2篇
- 2025版押一付三車位租賃合同模板參考9篇
- 2025年高端住宅產(chǎn)權(quán)轉(zhuǎn)讓合同范本3篇
- 2025-2030全球熔鹽儲(chǔ)熱設(shè)備行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)實(shí)驗(yàn)室渦旋混合器行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025版投票權(quán)委托合同:股東權(quán)益保護(hù)專項(xiàng)3篇
- 2025年度綠色有機(jī)農(nóng)產(chǎn)品個(gè)人果園承包經(jīng)營(yíng)合同書(shū)4篇
- 2025年N1叉車司機(jī)考試試題(附答案)
- 《醫(yī)院財(cái)務(wù)分析報(bào)告》課件
- 2025老年公寓合同管理制度
- 2024年考研政治試題及答案
- 2024-2025學(xué)年人教版數(shù)學(xué)六年級(jí)上冊(cè) 期末綜合卷(含答案)
- 2024中國(guó)汽車后市場(chǎng)年度發(fā)展報(bào)告
- 感染性腹瀉的護(hù)理查房
- 天津市部分區(qū)2023-2024學(xué)年高二上學(xué)期期末考試 物理 含解析
- 2025年初級(jí)社會(huì)工作者綜合能力全國(guó)考試題庫(kù)(含答案)
- 《人工智能基礎(chǔ)》全套英語(yǔ)教學(xué)課件(共7章)
- GB/T 35613-2024綠色產(chǎn)品評(píng)價(jià)紙和紙制品
評(píng)論
0/150
提交評(píng)論