版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、C#語言全書電子教案授課時間第 次課,第 周星期 第 節(jié)課時 授課方式理論課 討論課 習(xí)題課 實驗課 上機(jī)課 技能課 其他授課題目第一章 C#語言與開發(fā)環(huán)境目的與要求1. 了解C#語言發(fā)展的歷史和特點。2. 了解VS 2013在Win 7操作系統(tǒng)上的安裝和配置。3. 掌握VS 2013的主要功能和開發(fā)界面。4. 熟悉簡單C#程序開發(fā)的基本步驟。重點與難點重點:C#語言機(jī)器特點、C#程序開發(fā) 難點:熟悉VS 2013工具的使用教學(xué)基本內(nèi)容方法及手段(一)C#語言1. C#的歷史C#是和.NET Framework及開發(fā)環(huán)境Visual Studio一同成長起來的。2000年7月微軟公司發(fā)布了C#
2、語言的第一個預(yù)覽版;2002年2月,微軟公司推出.NET Framework 1.0版和.NET開發(fā)環(huán)境Visual Studio .NET 2002,同時推出C# 1.0版;2003年5月,微軟公司推出了.NET Framework 1.1和Visual Studio .NET 2003,同時也發(fā)布了C# 1.1版;2005年10月,微軟公司推出了.NET Framework 2.0和C# 2.0版;2005年11月,微軟公司發(fā)布Visual Studio 2005正式版;2006年11月,微軟公司發(fā)布.NET Framework 3.0;2007年8月,微軟公司發(fā)布C# 3.0版;2007
3、年11月,微軟公司發(fā)布.NET Framework 3.5和Visual Studio 2008;2010年,發(fā)布了C# 4.0版本和.NET Framework 4以及Visual Studio 2010;2012年,發(fā)布了C# 5.0版本和.NET Framework 4.5以及Visual Studio 2012;2013年,發(fā)布了.NET Framework 4.5.1和Visual Studio 2013;2016年,發(fā)布了C# 6.0版本和.NET Framework 4.6以及Visual Studio 2015。2. C#的特點C#繼承了C/C+的強(qiáng)大功能,并且拋棄了C/C+的
4、復(fù)雜特性,同時又借鑒了Java的優(yōu)點,具有安全、穩(wěn)定、簡單、優(yōu)雅的特點。C#具有功能強(qiáng)大、語法簡潔、面向?qū)ο蟆⑻峁┝送暾陌踩?、支持組件技術(shù)、具有自動內(nèi)存管理、良好的版本控制能力以及與Web緊密結(jié)合等優(yōu)點。(1)語法簡潔C#語法類似于C+和Java,并進(jìn)行了簡化,只保留了常見的形式。(2)面向?qū)ο驝#采用了面向?qū)ο笤O(shè)計思想,它將復(fù)雜的問題分解為一個個能夠完成獨立功能的相對簡單的對象的集合。C#具有面向?qū)ο蟪绦蛟O(shè)計語言的所有特征,支持抽象、封裝、繼承、重載、多態(tài)等特性。(3)可視化集成開發(fā)環(huán)境C#采用了可視化編程方式,用戶界面良好,采用拖放控件來設(shè)計界面,所見即所得,非常方便、高效。Visua
5、l Studio是.NET平臺默認(rèn)的集成開發(fā)環(huán)境,在這個環(huán)境中,可以進(jìn)行設(shè)計界面、編寫代碼、調(diào)試、編譯等工作。(4)內(nèi)存管理C#具有自動內(nèi)存管理機(jī)制,系統(tǒng)會根據(jù)一定算法自動回收不再被使用對象所占用的內(nèi)存。(5)功能強(qiáng)大的類庫.NET類庫內(nèi)容非常豐富,通過引用.NET類庫可以方便、高效地完成各種程序設(shè)計工作。.NET架構(gòu)(.NET Framework)是當(dāng)前程序設(shè)計的主流體系之一,代表了程序設(shè)計技術(shù)發(fā)展的方向。.NET是個集合,一個環(huán)境,一個可以作為平臺支持下一代Internet的可編程結(jié)構(gòu)。(二)C#語言開發(fā)工具1. 文本編輯工具文本編輯工具有很多種,如常用的記事本,這類工具大都非常簡單,功能
6、也有限,通常用來開發(fā)C#控制臺程序。2. 集成開發(fā)工具集成開發(fā)環(huán)境通常是所見即所得的開發(fā)工具,通常都功能強(qiáng)大。(1)Visual Studio使用集成開發(fā)環(huán)境通??赏ㄟ^拖放控件等方式自動生成一些代碼,使開發(fā)者更關(guān)注程序邏輯結(jié)構(gòu)的開發(fā),大大提高了程序的開發(fā)效率。Visual Studio就是典型的集成開發(fā)環(huán)境,功能非常強(qiáng)大,幾乎可以滿足開發(fā)者所有的需求。(2)SharpDevelopSharpDevelop是一個輕量級的開源免費開發(fā)工具,SharpDevelop支持多種程序語言,包括C#、Java以及VB,同時還支持多種語言界面。(3)EasyCSharpEasyCSharp是另一個優(yōu)秀的C#程
7、序集成開發(fā)環(huán)境,使用簡便,適合小型C#應(yīng)用程序的開發(fā)。(三)Visual Studio 2013 Visual Studio 2013內(nèi)置了多種提高工作效率的功能,如自動補(bǔ)全方括號、快捷鍵移動整行或整塊代碼以及行內(nèi)導(dǎo)航。Visual Studio 2013的團(tuán)隊資源管理器可以更簡便地導(dǎo)航到團(tuán)隊協(xié)作功能。VS 2013新功能如下所述。1. 支持 Windows 8.1 App 開發(fā)。Visual Studio 2013 提供的工具集非常適合Windows平臺創(chuàng)新的新式應(yīng)用程序,同時在所有Microsoft 平臺上支持設(shè)備和服務(wù)。2. 敏捷項目管理。提供敏捷項目組合管理,提高團(tuán)隊協(xié)作。3. 版本控
8、制。VS一直在改進(jìn)自身的版本控制功能,包括Team Explorer新增的Connect功能,可以同時關(guān)注多個團(tuán)隊項目。4. 新增代碼信息指示。VS 2013增強(qiáng)了提示功能,能在你編碼的同時幫你監(jiān)察錯誤,并通過多種指示器進(jìn)行提示。5. 測試完善。VS 2013更進(jìn)一步完善了測試功能,新增了測試用例管理功能,能夠在不開啟專業(yè)測試客戶端的情況下進(jìn)行測試。6. 團(tuán)隊協(xié)作。VS 2013中將新增Team Rooms來進(jìn)一步加強(qiáng)該特性,登記、構(gòu)建、代碼審查等一切操作都將會被記錄下來。7. 整合微軟System Center IT管理平臺。Visual Studio 2013還有團(tuán)隊工作室、身份識別、.N
9、ET內(nèi)存轉(zhuǎn)儲分析儀、Git支持等特性。(一)創(chuàng)建C#項目VS 2013開發(fā)環(huán)境中的基本操作:創(chuàng)建項目,編寫項目,編譯項目和調(diào)試項目。1. 創(chuàng)建項目選擇“文件”“新建”“項目”菜單項,將彈出“新建項目”對話框。(1)Windows窗體應(yīng)用程序:創(chuàng)建一個窗口程序。(2)類庫:創(chuàng)建Visual Studio中的.NET框架類庫。(3)ASP.NET Web應(yīng)用程序、ASP.NET Web服務(wù)應(yīng)用程序:用于創(chuàng)建Web應(yīng)用程序。(4)控制臺應(yīng)用程序:創(chuàng)建使用字符界面的應(yīng)用程序。2. 編寫工程控制臺應(yīng)用程序:在Main方法中編寫代碼。窗體應(yīng)用程序:在設(shè)計圖中向Form1添加控件,編寫代碼。3. 編譯工程選
10、擇“生成”“生成解決方案”菜單項,將對項目進(jìn)行編譯。如果編譯成功,則在底部的“輸出”窗口中輸出。選擇“生成”“重新生成解決方案”菜單項,將過去生成的結(jié)果刪除掉,然后再生成新的應(yīng)用程序。4. 調(diào)試方案單擊工具欄中的“啟動”按鈕,運行程序。選擇“調(diào)試”“啟動調(diào)試”菜單項(或直接按F5鍵),啟動調(diào)試功能。按CTRL+F5是不調(diào)試運行程序。選擇“調(diào)試” “逐語言”菜單項(或直接按F11鍵),啟動逐語句調(diào)試功能。(二)簡單的C#編程語法1. C#程序結(jié)構(gòu)最簡單的C#程序由一個命名空間構(gòu)成,該命名空間中包含一個類。對于復(fù)雜的C#程序可以包含多個命名空間,在每個命名空間中可以包含多個類。2. 大小寫的敏感性
11、C#是一種對大小寫敏感的語言,同名的大寫和小寫代表不同的對象,因此在輸入關(guān)鍵字、變量和函數(shù)時必須使用適當(dāng)?shù)淖址?。C#的關(guān)鍵字基本上采用小寫,如if、for,while等。定義變量時,私有變量的定義一般都以小寫字母開頭,而公共變量的定義則以大寫字母開頭。3. 注釋在程序開發(fā)中,注釋也是非常重要的。C#提供了以下兩種注釋類型。(1)單行注釋,注釋符號是“/”。(2)多行注釋,注釋符號是“/*”和“*/”。此外XML注釋符號“/”也可以用來對C#程序進(jìn)行注釋。4. 語句終止符每一句C#程序都要以語句終止符來終結(jié),C#的語句終止符是“;”。在C#程序中,可以在一行中寫多個語句,但每個語句都要以“;”結(jié)
12、束,也可以在多行中寫一個語句,但是在最后一行以“;”結(jié)束。5. 語句塊在C#程序中,用符號“”和“”包含起來的程序稱為語句塊。語句塊在條件和循環(huán)語句中經(jīng)常會用到,主要是把重復(fù)使用的程序語句放在一起以方便使用,這樣有助于程序的結(jié)構(gòu)化。例如:這段代碼用來求100以內(nèi)的所有偶數(shù)的和。int sum = 0;for (int i =1;i 大于=大于等于小于=小于等于x is T數(shù)據(jù)x是否屬于Tx as T返回轉(zhuǎn)換為類型T的x不是T返回null注意:關(guān)系運算符的優(yōu)先級相同。對于兩個預(yù)定義的數(shù)值類型,關(guān)系運算符按照操作數(shù)的數(shù)值大小進(jìn)行比較。對于string類型,關(guān)系運算符比較字符串的值,即按字符的ASC
13、II碼值從左到右一一比較:首先比較兩個字符串的第一個字符,其ASCII碼值大的字符串大,若第一個字符相等,則繼續(xù)比較第二個字符,以此類推,直至出現(xiàn)不同的字符為止。(四)邏輯運算符邏輯運算符如表2-8所示。表2-8 邏輯運算符運算符含義說明優(yōu)先級!邏輯非當(dāng)操作數(shù)為False時,返回True;當(dāng)操作數(shù)為True時返回False1&邏輯與兩個操作數(shù)均為True時,結(jié)果才為True,否則為False2邏輯異或兩個操作數(shù)不相同,即一個為True一個為False時,結(jié)果才為True,否則為False3|邏輯或兩個操作數(shù)中有一個為True時,結(jié)果即為True,否則為False4&條件與兩個操作數(shù)均為True
14、時,結(jié)果才為True。僅在必要時才計算第二個操作數(shù)5|條件或兩個操作數(shù)中有一個為True時,結(jié)果即為True。僅在必要時才計算第二個操作數(shù)6(五)字符串運算符C#提供的字符串運算符只有“+”,用于串聯(lián)(拼接)兩個字符串。當(dāng)其中的一個操作數(shù)是字符串類型或兩個操作數(shù)都是字符串類型時,二元“+”運算符執(zhí)行字符串串聯(lián)。當(dāng)字符串串聯(lián)運算中,如果它的一個操作數(shù)為null,則用空字符串來替換此操作數(shù)。否則,任何非字符串參數(shù)都通過調(diào)用從object類型繼承的虛ToString方法,轉(zhuǎn)換為它的字符串表示形式。如果ToString返回null,則替換成空字符串。(六)位運算符位運算符如表2-9所示。表2-9 位運
15、算符運算符含義優(yōu)先級按位求補(bǔ)1右移2&按位邏輯與3按位邏輯異或4|按位邏輯或5(七)其它運算符sizeof用于獲取值類型的字節(jié)大小,僅適用于值類型,而不適用于引用類型。sizeof運算符只能在不安全代碼塊中使用。typedef用于獲取類型的System.Type對象,如System.Type type = typeof(int);。若要獲取表達(dá)式的運行時類型,可以使用.NET Framework方法GetType()。條件運算符邏輯表達(dá)式?表達(dá)式1:表達(dá)式2;首先計算“邏輯表達(dá)式”的值,如果True,則運算結(jié)果為“表達(dá)式1”的值,否則運算結(jié)果為“表達(dá)式2”的值。計算a和b兩個數(shù)中較大的數(shù),并將
16、其賦給變量max。max = (a b)? a: b;(一)簡單賦值語句賦值運算符是符號“=”,它的作用是將一個數(shù)據(jù)賦給一個變量。由賦值運算符將一個變量和一個表達(dá)式連接起來的式子稱為賦值表達(dá)式。賦值表達(dá)式的一般形式如下:變量=表達(dá)式其作用是把賦值運算符右邊表達(dá)式的值賦給賦值運算符左邊的變量。例如:a=1;b=a;a=b=c=2;c=b+a;注意:1. 賦值運算后,變量原來的值被表達(dá)式的值替換。2. 賦值表達(dá)式的值也就是賦值運算符左邊變量得到的值,如果右邊表達(dá)式的值的類型與左邊變量的類型不一致,以左邊變量的類型為基準(zhǔn),將右邊表達(dá)式的值的類型無條件的轉(zhuǎn)換為左邊變量的類型,相應(yīng)的賦值表達(dá)式的值的類型
17、與被賦值的變量的類型一致。3. 賦值運算符的優(yōu)先級很低,僅高于逗號運算符。結(jié)合方向為“從左到右”。(二)復(fù)合賦值語句為使程序書寫簡潔和便于代碼優(yōu)化,可在賦值運算符的前面加上其它常用的運算符,構(gòu)成復(fù)合賦值運算符,相應(yīng)地,由復(fù)合賦值運算符也可構(gòu)成賦值表達(dá)式。復(fù)合賦值運算符如表2-10所示。表2-10 賦值運算符運算符含義舉例等效于+=加法賦值sum += itemsum=sum+ item-=減法賦值count +=1count=count+1*=乘法賦值x *=y+5x =x* (y+5)/=除法賦值x /= y-zx= x/ (y-z)%=取模賦值x %= 2x=x % 2=左移賦值x = y
18、x = x=右移賦值x =yx =xy&=與賦值x &=53x =x&(53)|=或賦值x |= truex=x|true=異或賦值x = yx=xy思考題、作業(yè)、參考文獻(xiàn)課 后小 結(jié)C#中的數(shù)據(jù)類型分為值類型和引用類型,其中值類型又包括整數(shù)類型、布爾類型、實數(shù)類型、結(jié)構(gòu)類型和枚舉類型;而引用類型包括類、接口、代表和數(shù)組。值類型的變量總是直接包含著自身的數(shù)據(jù),而引用類型的變量是指向?qū)嶋H數(shù)據(jù)的地址。C#規(guī)定,在特定的值類型之間以及引用類型之間可以進(jìn)行隱式或顯式的類型轉(zhuǎn)換,能夠以面向?qū)ο蟮姆绞絹硖幚硪磺袛?shù)據(jù)類型。類型的實例根據(jù)其使用方式的不同,可以分為常量和變量。常量和變量都必須先定義后使用。表達(dá)
19、式主要包括:算術(shù)表達(dá)式、賦值表達(dá)式、關(guān)系表達(dá)式、條件邏輯表達(dá)式等。通過對這些操作符和表達(dá)式的靈活應(yīng)用,能夠滿足大多數(shù)情況下數(shù)據(jù)運算和處理的要求。授課時間第 次課,第 周星期 第 節(jié)課時 授課方式理論課 討論課 習(xí)題課 實驗課 上機(jī)課 技能課 其他授課題目第三章 程序控制目的與要求1. 掌握C#語言中的輸入輸出語句。2. 了解程序控制的概念,掌握選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的實現(xiàn)。3. 掌握跳轉(zhuǎn)語句和嵌套循環(huán)的使用。重點與難點重點:程序控制的實現(xiàn)語句難點:for和whle語句教學(xué)基本內(nèi)容方法及手段(一)輸入輸出C#控制臺程序一般使用.NET Framework HYPERLINK /zh-cn/libra
20、ry/system.console.aspx Console類提供的輸入、輸出服務(wù)。輸出有Write、WriteLine方法,輸入有Read、ReadLine和ReadKey方法。Console.WriteLine()方法是將要輸出的字符串與換行控制字符一起輸出,當(dāng)語句執(zhí)行完畢時,光標(biāo)會移到目前輸出字符串的下一行;至于Console.Write()方法,光標(biāo)會停在輸出字符串的最后一個字符后,不會移動到下一行。注意:Console類是System命名空間的成員。如果程序開頭沒有包含using System;語句,則必須指定System類。(二)控制臺輸出1. 輸出字符串WriteLine可輸出字
21、符串。Console.WriteLine(Hello World!);2. 輸出數(shù)字WriteLine也可輸出數(shù)字。int x = 100;Console.WriteLine(x);3. 輸出若干個項WriteLine還可以一次輸出多項,需要用0表示第一項,1表示第二項,依此類推,比如:int year = 2017;string str = 今年是;Console.WriteLine( 0 1年., str, year);(三)控制臺輸入在C#控制臺程序中提供了三種方法讓用戶輸入所需數(shù)據(jù)。1. Read()方法讀取單個字符,它等待用戶輸入一個鍵,然后返回結(jié)果。字符作為int類型的值返回,所以
22、要顯示字符就必須轉(zhuǎn)換為char類型。Console.Write(按鍵之后請按ENTER鍵:);ch = (char) Console.Read(); 2. ReadLine()方法讀取一串字符,該方法一直讀取字符,直到用戶按下ENTER鍵,然后將它們返回到string類型的對象中。Console.WriteLine(請輸入一些單詞);str = Console.ReadLine();3. ReadKey()方法讀取一個按鍵,和ReadLine()不同,它是用戶按下即讀取,而ReadLine()是等待用戶按下ENTER鍵。Console.WriteLine(請按鍵);str = Console.
23、ReadKey().Key.ToString();(一)語句語句是程序的基本組成部分,正是一條條語句組成了程序。在C#中,除了單行語句外,還有一些復(fù)雜的語句,用來幫助完成比較復(fù)雜的邏輯程序。條件語句通過判斷條件是否為真來執(zhí)行相應(yīng)的語句塊。在C#中,有兩種形式的條件語句結(jié)構(gòu):if語句和switch語句。(二)if語句if語句的語法如下。if(條件) 執(zhí)行的語句;else 執(zhí)行的語句;if語句根據(jù)條件的真假來執(zhí)行相應(yīng)的語句塊,如果條件為真,則執(zhí)行if語句塊;若為假,則執(zhí)行else語句塊。例如,求兩個數(shù)中的最大者,代碼如下。int a = 2;int b = 5;int max;if(a b ) m
24、ax = a;else max=b;注意:(1)如果執(zhí)行的語句只有一條,則可以省略花括號。(2)if語句中條件表達(dá)式的結(jié)果必須等于布爾值。(三)if語句變化if語句還有幾個變化形式,可以單獨使用if語句,而不加else語句。如果有多個條件需要判斷,也可以通過添加else if語句。if(條件) 或者if(條件1) else if(條件2) else (一)switch語句switch語句結(jié)構(gòu)形式如下。switch(條件表達(dá)式) case 條件 1: 執(zhí)行的語句; break; case 條件 2 執(zhí)行的語句; break; case 條件 n 執(zhí)行的語句; break; default: 執(zhí)行
25、的語句; break;程序在執(zhí)行時,從前到后,把條件表達(dá)式的值與存在的條件進(jìn)行比對,若相同則執(zhí)行該語句,執(zhí)行完該語句后跳出switch語句塊;若沒有滿足條件存在則執(zhí)行default分支,因此在編寫程序時可以把不能清晰定義的情況放在default分支中來處理。(二)注意事項分支switch語句需要注意。1. 需要使用break語句跳出switch結(jié)構(gòu),否則會執(zhí)行其后的每一個case語句。2. case后常量表達(dá)式的值不能相同。3. default可以省略,也可以放在其它位置。(一)do-while循環(huán)do-while循環(huán)的結(jié)構(gòu)形式如下。do 執(zhí)行的語句;while(條件);do-while循環(huán)在
26、執(zhí)行時將先執(zhí)行一次循環(huán),然后再驗證條件,如果條件為真,則繼續(xù)循環(huán)。因此do-while循環(huán)將至少被執(zhí)行一次。(二)while 循環(huán)while循環(huán)的結(jié)構(gòu)形式如下。while(條件) 執(zhí)行的語句;在循環(huán)開始前,如果不知道循環(huán)的次數(shù)的話,可以使用while循環(huán)。在循環(huán)開始前,先檢測條件是否為true,然后再決定是否執(zhí)行循環(huán)。(三)for循環(huán)for循環(huán)的結(jié)構(gòu)形式如下。for(initializer; condition; iterator) 執(zhí)行的語句;其中:Initializer是執(zhí)行第一次循環(huán)之前要對條件進(jìn)行初始化的表達(dá)式。Condition是在每次循環(huán)之前要判斷的條件。Iterator是每次循環(huán)
27、之后要計算的表達(dá)式。(四)foreach循環(huán)foreach循環(huán)用來實現(xiàn)對集合中的每一項都遍歷的循環(huán),將在第四章內(nèi)講解。(一)跳轉(zhuǎn)語句跳轉(zhuǎn)語句將控制轉(zhuǎn)移到程序的其它部分,跳轉(zhuǎn)語句有以下幾種。break語句、continue語句、goto語句、return語句和throw語句。(二)break語句break語句用于終止最近的封閉循環(huán)或它所在的switch語句??刂苽鬟f給終止語句后面的語句。(三)continuecontinue語句用于將控制權(quán)傳遞到它所在的循環(huán)語句的下一次循環(huán)。(四)goto語句goto語句用于將程序控制權(quán)直接傳遞到標(biāo)記語句。goto語句通常用于將控制權(quán)傳遞給特定的switch標(biāo)簽
28、和跳出深嵌套循環(huán)。(五)return語句return語句用于終止其所在的方法并將控制權(quán)返回給調(diào)用方法。(六)throw語句throw語句用于拋出在程序執(zhí)行期間出現(xiàn)異常情況的信號。通常throw語句與try-catch或try-finally語句一起使用。當(dāng)引發(fā)異常時,程序查找處理此異常的catch語句。也可以用throw語句重新引發(fā)已捕獲的異常。嵌套循環(huán)是指一個循環(huán)內(nèi)使用另一個循環(huán),嵌套循環(huán)的如下所示。C#中嵌套for循環(huán)語句的語法。for ( init; condition; increment ) for ( init; condition; increment ) statement(s
29、); statement(s);C#中嵌套while循環(huán)語句的語法。while(condition) while(condition) statement(s); statement(s);C#中嵌套dowhile 循環(huán)語句的語法。do statement(s); do statement(s); while( condition );while( condition );可以在任何類型的循環(huán)內(nèi)嵌套其它任何類型的循環(huán),比如一個for循環(huán)可以嵌套在一個while循環(huán)內(nèi)。思考題、作業(yè)、參考文獻(xiàn)課 后小 結(jié)使用控制結(jié)構(gòu)能夠改變程序執(zhí)行的流程,從而形成程序的分支和循環(huán)。C#中這些控制結(jié)構(gòu)使用的關(guān)鍵字包
30、括:選擇控制:if、else、switch、case。循環(huán)控制:while、do、for、foreach。跳轉(zhuǎn)控制:break、continue、return??刂平Y(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計中的關(guān)鍵要素。把正常的順序執(zhí)行與這些選擇、循環(huán)、跳轉(zhuǎn)語句結(jié)構(gòu)起來,能夠在程序中實現(xiàn)各種復(fù)雜的算法。授課時間第 次課,第 周星期 第 節(jié)課時 授課方式理論課 討論課 習(xí)題課 實驗課 上機(jī)課 技能課 其他授課題目第四章 數(shù)組目的與要求1. 掌握數(shù)組的定義、賦值和訪問的方法。2. 掌握數(shù)組的遍歷、排序等方法。重點與難點重點:數(shù)組的定義和訪問難點:數(shù)組的遍歷和排序教學(xué)基本內(nèi)容方法及手段(一)數(shù)組概念1. 數(shù)組數(shù)組(arr
31、ay)是一種包含類型相同的若干變量的數(shù)據(jù)結(jié)構(gòu),可以通過計算索引來訪問這些變量。數(shù)組中包含的變量叫做數(shù)組的元素(element)。數(shù)組的元素都具有相同的類型,該類型稱為數(shù)組的元素類型。數(shù)組的元素類型可以是任意類型,包括數(shù)組類型。2. 數(shù)組的維度數(shù)組有一個“秩”,它確定和每個數(shù)組元素關(guān)聯(lián)的索引個數(shù)。數(shù)組的秩又稱為數(shù)組的維度?!爸取睘?的數(shù)組稱為一維數(shù)組?!爸取贝笥?的數(shù)組稱為多維數(shù)組。維度大小確定的多維數(shù)組通常稱為二維數(shù)組、三維數(shù)組等。數(shù)組的每個維度都有一個關(guān)聯(lián)的長度,它是一個大于或等于零的整數(shù)。維度的長度不是數(shù)組類型的組成部分,只與數(shù)組類型的實例相關(guān)聯(lián)。維度的長度是在創(chuàng)建實例時確定的。維度的長度
32、確定了維度的索引有效范圍:對于長度為N的維度,索引的范圍可以為0到N-1(包括0和N-1)。數(shù)組中的元素總數(shù)是數(shù)組中各維度長度的乘積。如果數(shù)組的一個或多個維度的長度為零,則稱該數(shù)組為空。(二)數(shù)組定義一維數(shù)組定義語法:數(shù)據(jù)類型 數(shù)組名;二維數(shù)組定義語法:數(shù)據(jù)類型 , 數(shù)組名;三維數(shù)組定義與二維數(shù)組類似,只是多了一個維度。一維數(shù)組、二維數(shù)組和三維數(shù)組定義例子如下。int a1 = new int10;int, a2 = new int10, 5;int, , a3 = new int10, 5, 2;(三)賦值1. 一維數(shù)組賦值對于一維數(shù)組,數(shù)組初始值設(shè)定項必須包含一個表達(dá)式序列,這些表達(dá)式是與
33、數(shù)組的元素類型兼容的賦值表達(dá)式。這些表達(dá)式從下標(biāo)為零的元素開始,按照升序初始化數(shù)組元素。數(shù)組初始值設(shè)定項中所含的表達(dá)式的數(shù)目確定正在創(chuàng)建的數(shù)組實例的長度。數(shù)組賦值如下所示。int a = new int 1, 2, 3;等效于:int a = new int3;a0 = 1;a1 = 2;a2 = 3;2. 多維數(shù)組賦值對于多維數(shù)組,數(shù)組初始值設(shè)定項必須具有與數(shù)組維數(shù)同樣多的嵌套級別。最外面的嵌套級別對應(yīng)于最左邊的維度,而最里面的嵌套級別對應(yīng)于最右邊的維度。數(shù)組各維度的長度是由數(shù)組初始值設(shè)定項中相應(yīng)嵌套級別內(nèi)的元素數(shù)目確定的。對于每個嵌套的數(shù)組初始值設(shè)定項,元素的數(shù)目必須與同一級別的其它數(shù)組初
34、始值設(shè)定所包含的元素數(shù)相同。多維數(shù)組賦值如下所示。int , b = new int5, 2;b0, 0 = 0; b0, 1 = 1;b1, 0 = 0; b1, 1 = 3;b2, 0 = 0; b2, 1 = 5;b3, 0 = 0; b3, 1 = 7;b4, 0 = 0; b4, 1 = 9;(四)數(shù)組元素訪問數(shù)組元素訪問的結(jié)果是變量,即由下標(biāo)選定的數(shù)組元素。數(shù)組元素訪問方式為:數(shù)組名下標(biāo)比如:一維數(shù)組元素訪問:a3,表示數(shù)組a的第4個元素,因為數(shù)組從零開始計算;多維數(shù)組元素訪問:a2,3。數(shù)組定義、賦值和訪問示例如下。int a = new int3;a0 = 0 * 0;a1 =
35、 1 * 1;a2 = 2 * 2;Console.WriteLine(“a0 = 0”, a0);Console.WriteLine(“a1 = 1”, a1);Console.WriteLine(“a2 = 2”, a2);(五)交錯數(shù)組交錯數(shù)組是數(shù)組的數(shù)組,因此其元素是引用類型并初始化為null。數(shù)組元素訪問格式如下所示。jaggedArray301 = 77;jaggedArray321 = 88;可以混合使用交錯數(shù)組和多維數(shù)組。(一)foreachforeach語句對實現(xiàn) HYPERLINK /zh-cn/library/system.collections.ienumerable.
36、aspx System.Collections.IEnumerable或 HYPERLINK /zh-cn/library/9eekhta0.aspx System.Collections.Generic.IEnumerable接口的數(shù)組或?qū)ο蠹现械拿總€元素遍歷。foreach語句用于循環(huán)訪問集合,以獲取您需要的信息。當(dāng)為集合中的所有元素完成迭代后,控制傳遞給foreach塊之后的下一個語句。注意:不能用于在源集合中添加或移除項,否則可能產(chǎn)生不可預(yù)知的錯誤。如果需要在源集合中添加或移除項,請使用 HYPERLINK /zh-cn/library/ch45axte.aspx for循環(huán)??梢栽?/p>
37、foreach中使用 HYPERLINK /zh-cn/library/adbctzc4.aspx break關(guān)鍵字跳出循環(huán),或使用 HYPERLINK /zh-cn/library/923ahwt1.aspx continue關(guān)鍵字進(jìn)入循環(huán)的下一輪迭代。(二)foreach遍歷數(shù)組該語句提供一種簡單、明了的方法來循環(huán)訪問數(shù)組或任何可枚舉集合的元素。foreach語句按數(shù)組或集合類型的枚舉器返回的順序處理元素,該順序通常是從第0個元素到最后一個元素。例如,int numbers = 4, 5, 6, 1, 2, 3, -2, -1, 0 ;foreach (int i in numbers)
38、System.Console.Write(0 , i);/ 輸出: 4 5 6 1 2 3 -2 -1 0在多維數(shù)組中,可以使用相同的方法來循環(huán)訪問元素,例如:int, numbers2D = new int3, 2 9, 99 , 3, 33 , 5, 55 ;foreach (int i in numbers2D) System.Console.Write(0 , i);/ 輸出: 9 99 3 33 5 55但對于多維數(shù)組,使用嵌套的 HYPERLINK /zh-cn/library/ch45axte.aspx for循環(huán)可以更好地控制數(shù)組元素。(一)Array類數(shù)組類型都是從Syste
39、m.Array類型派生而來的。存在從任何數(shù)組類型到System.Array的隱式引用轉(zhuǎn)換,并且存在從System.Array到任何數(shù)組類型的顯式引用轉(zhuǎn)換。每個數(shù)組類型都繼承由System.Array類型所聲明的成員,其中最重要的是Length和Rank屬性,Length說明了數(shù)組的元素個數(shù),Rand說明了數(shù)組的秩??梢酝ㄟ^這個屬性來得知任何一個已經(jīng)創(chuàng)建的數(shù)組對象的元素個數(shù)和秩。(二)Array屬性Array類的屬性如表4-1所示。表4-1 Array類的屬性方法說明IsFixedSize獲取一個值,該值指示Array是否具有固定大小IsReadOnly獲取一個值,該值指示Array是否只讀Le
40、ngth獲得一個32位整數(shù),該證書表示Array的所有維數(shù)中元素的總數(shù)Rank獲取Array的秩(維數(shù))(三)Array方法Array類的方法如表4-2所示。表4-2 Array類的方法方法說明Clear將Array中的一系列元素設(shè)置為零、false或空引用(在Visual Basic 中為Nothing),具體取決于元素類型Clone創(chuàng)建Array的淺表副本Copy已重載。將一個Array的一部分元素賦值到另一個Array中,并根據(jù)需要執(zhí)行的類型強(qiáng)制轉(zhuǎn)換和裝箱Exists確定指定數(shù)組包含的元素是否與指定謂詞定義的條件匹配Find搜索與指定謂詞定義的條件匹配的元素怒,然后返回整個Array中的
41、第一個匹配項FindAll檢索與指定謂詞定義的條件匹配的所有元素ForEach對指定數(shù)組的每個元素執(zhí)行指定操作GetLength獲取一個32位整數(shù),該證書表示Array的指定維中的元素數(shù)GetLowerBound獲取Array中指定維度的下限GetUpperBound獲取Array中指定維度的上限GetValue已重載。獲取當(dāng)前Array中指定元素的值IndexOf已重載。返回一維Array或部分Array中某個值第一個匹配項的索引LastIndexOf已重載。返回一維Array或部分Array中某個值的最后一個匹配項的索引Resize將數(shù)組的大小更改為指定的新大小Reverse已重載。反轉(zhuǎn)一
42、維Array或部分Array中元素的順序SetValue已重載。將當(dāng)前Array中的指定元素設(shè)置為指定值Sort已重載。對一維Array對象中的元素進(jìn)行排序1. 排序Array類提供的Sort方法是一個靜態(tài)方法,用于對一維Array對象中的元素進(jìn)行排序。該方法默認(rèn)對數(shù)組按升序排列。2. Reverse方法用于反轉(zhuǎn)一維Array或部分Array中元素的順序。(1)Array.Reverse(Array):反轉(zhuǎn)整個一維Array中元素的順序。(2)Array.Reverse(Array,Int32,Int32):反轉(zhuǎn)一維Array中某部分元素的順序3. 搜索Array類提供的可用于搜索功能的方法包
43、括BinarySearch、Find、FindAll、FindIndex、FindLast、FindLastIndex、IndexOF、LastIndexOf。4. 復(fù)制Array類提供的可用于復(fù)制功能的方法包括Copy和CopyTo。Copy方法用于將源數(shù)組一部分元素復(fù)制到目標(biāo)數(shù)組中,并根據(jù)需要執(zhí)行類型強(qiáng)制轉(zhuǎn)換和裝箱。(1)Array.Cope(Array,Array,Int):從第一個元素開始復(fù)制到Array中的一系列元素,將它們粘貼到另一個Array中,其中第3個參數(shù)表示要復(fù)制的長度。(2)Array.Copy(Array,Int,Array,Int,Int):從指定的源索引開始,復(fù)制A
44、rray中一系列元素,將它們粘貼到另一個Array中,其中第2個參數(shù)表示源數(shù)組的要復(fù)制元素的開始索引,第4個參數(shù)表示目標(biāo)數(shù)組的復(fù)制位置的開始索引,第5個參數(shù)表示要復(fù)制的長度。CopyTo方法用于將當(dāng)前一維數(shù)組的所有元素復(fù)制到指定的一維數(shù)組中。思考題、作業(yè)、參考文獻(xiàn)課 后小 結(jié)本章內(nèi)容主要包括數(shù)組概念、數(shù)組的定義、初始化、賦值和使用以及數(shù)組的常見操作,比如數(shù)組的遍歷、排序、復(fù)制和查詢等。授課時間第 次課,第 周星期 第 節(jié)課時 授課方式理論課 討論課 習(xí)題課 實驗課 上機(jī)課 技能課 其他授課題目第五章 類與對象目的與要求1. 掌握類的概念及如何定義類。2. 掌握對象的創(chuàng)建和使用。3. 掌握構(gòu)造方
45、法和析構(gòu)方法。4. 掌握不同訪問修飾符的作用范圍。重點與難點重點:類和對象的概念、定義和使用難點:類和對象的概念教學(xué)基本內(nèi)容方法及手段(一)對象和類概述在用面向?qū)ο缶幊蹋∣bject Oriented Programming,OOP)技術(shù)開發(fā)的系統(tǒng)中,對象是要研究的任何事物。從一本書到一家圖書館都可看作對象,它不僅能表示有形的實體,也能表示無形的(抽象的)規(guī)則、計劃或事件。在程序設(shè)計階段,應(yīng)該清楚所要解決的問題中有多少對象,每一個對象具有哪些屬性,以及各個對象之間的聯(lián)系等,然后把具有相同屬性和行為的對象劃分為一個“類”,并明確每個類的基本屬性和行為方法。類是數(shù)據(jù)成員以及處理這些數(shù)據(jù)成員相應(yīng)函數(shù)
46、的集合,類的實例被稱為對象。類是面向?qū)ο蟪绦蛟O(shè)計中最重要的概念。類是對象的模板。即類是對一組有相同數(shù)據(jù)和相同操作的對象的定義,一個類所包含的方法和數(shù)據(jù)描述一組對象的共同屬性和行為。類是在對象之上的抽象,對象則是類的具體化,是類的實例。(二)類的定義在C#中使用關(guān)鍵字class定義類,類的定義格式如下:訪問修飾符class 類的主體部分訪問修飾符用于控制類中的成員變量和成員方法的訪問權(quán)限,可以保證其中的數(shù)據(jù)不被隨意訪問和修改,C#提供的修飾符如表5-1所示。表5-1 修飾符修飾符說明private成員變量和方法只能在這個類中訪問protected成員變量和方法除了可被本身訪問外,還可被該類的派生
47、類訪問public成員變量和方法可被任何外部類訪問internal成員變量和方法在整個項目中都可以被訪問當(dāng)上述修飾符用來聲明類時,含義如表5-2所示。表5-2 類修飾符修飾符說明private/ protected私有或保護(hù)訪問權(quán)限制的類不能在類外被訪問public類可以在任何地方訪問internal類只能在當(dāng)前項目中訪問類的成員變量的定義格式如下:訪問修飾符 數(shù)據(jù)類型 以下代碼表示在Student類的定義中聲明成員變量:public class Student public string name; public int age; public int number;2. 類的成員方法的定義
48、類的成員變量的定義格式如下:訪問修飾符 返回值類型 (參數(shù)列表) 成員方法主體在Student類的定義中聲明成員方法。public class Student public string name; public int age; public int number; public void PrintInformation() Console.WriteLine(姓名:0,年齡:1,學(xué)號:2, name,age,number); (三)對象的創(chuàng)建為了從類中產(chǎn)生對象,必須建立類對象的實例,C#中可以使用new操作符建立一個類的新實例。示例如下所示。Student oneStudent=new
49、Student( );oneStudent.PrintInformation( );(四)命名空間.NET類的集合被統(tǒng)稱為.NET類庫或.NET基類庫,類庫中功能相似的類構(gòu)成了一個命名空間。命名空間可以被視為用來存放類的容器,命名空間和類的關(guān)系很像我們熟知的文件夾和文件的關(guān)系,通過使用命名空間的方法可以將類組織與管理起來。對于復(fù)雜的C#程序可以包括多個命名空間,在每個命名空間中可以包含多個類,程序設(shè)計者也可采用導(dǎo)入系統(tǒng)提供的命名空間的方式,使用.NET類庫提供的豐富的功能。程序會使用using默認(rèn)導(dǎo)入一些命名空間,這些命名空間提供了常用的類,若程序設(shè)計者需要其它特別功能,則需要導(dǎo)入專門的命名空
50、間。命名空間定義以命令關(guān)鍵字namespace開頭,其格式如下:namespace命名空間的名稱 /命名空間的成員,也可以是另一個命名空間(一)實例方法和靜態(tài)方法實例方法是對象的方法,使用的是實例對象調(diào)用,實例化對象時要進(jìn)行初始化。靜態(tài)方法屬于類本身的方法,用的是類名調(diào)用,調(diào)用前需要進(jìn)行初始化。實例方法的定義形式:訪問修飾符 返回值類型 (參數(shù)列表) 方法體 靜態(tài)方法的定義形式:訪問修飾符 static 返回值類型 (參數(shù)列表) 方法體靜態(tài)方法中有一個常用方法,即Main方法。Main方法是程序的入口,程序通過調(diào)用Main方法開始執(zhí)行?!臼纠?-1】Main方法的使用。public class
51、 Student public string name; public int age; Public int number; public void PrintInformation() Console.WriteLine(“姓名:0,年齡1,學(xué)號:2”, name,age,number); Class TestStudent Static void Main(string args) Student s=new Student(); =”zhangsan”; s.age=12; s.number=20120209; s.PrintInformation(); Console.ReadKey
52、(); 運行結(jié)果如圖5-4所示。圖5-4 運行結(jié)果圖(二)構(gòu)造方法構(gòu)造方法通常又稱為構(gòu)造函數(shù),是類的一個特殊的成員方法。定義構(gòu)造函數(shù)的格式如下:訪問修飾符 類名() 構(gòu)造函數(shù)主體部分說明:(1)構(gòu)造函數(shù)與類同名;(2)構(gòu)造函數(shù)不返回任何值;(3)構(gòu)造函數(shù)主體部分主要包括對成員變量的初始化語句。構(gòu)造函數(shù)用來完成類成員變量的自動初始化,C#中每次創(chuàng)建的實例時都會調(diào)用類中的構(gòu)造函數(shù)。構(gòu)造函數(shù)可以分為三種:實例構(gòu)造函數(shù)、靜態(tài)構(gòu)造函數(shù)和私有構(gòu)造函數(shù)。1. 實例構(gòu)造函數(shù)實例構(gòu)造函數(shù)用于創(chuàng)建和初始化實例,創(chuàng)建新對象時調(diào)用類的構(gòu)造函數(shù)。如果一個類中不包含任何構(gòu)造函數(shù)的聲明,系統(tǒng)就會自動提供一個默認(rèn)的構(gòu)造函數(shù),
53、這個默認(rèn)的構(gòu)造函數(shù)沒有任何參數(shù),并且將用默認(rèn)值來初始化對象字段。在類中也可以創(chuàng)建帶有參數(shù)的構(gòu)造函數(shù)。【示例5-2】以下代碼在定義的Student類中聲明了默認(rèn)構(gòu)造函數(shù),也編寫了一個帶參數(shù)的構(gòu)造函數(shù)。class Student public string name; public int age; public int number; public Student() name=未命名; age=0; number=0; public Student(string _name,int _age,int _number) name=_name; age=_age; number =_number;
54、 public void PrintInformation() Console.WriteLine(姓名:0,年齡;1,學(xué)號:2, name,age,number); class TestStudent static void Main(string args) Student s1 = new Student(); Student s2 = new Student(wangwu,21,20120305); s1.PrintInformation(); s2.PrintInformation(); Console.ReadKey(); 運行結(jié)果如圖5-5所示。圖5-5 運行結(jié)果圖2. 靜態(tài)構(gòu)造
55、函數(shù)靜態(tài)構(gòu)造函數(shù)用來初始化靜態(tài)變量,使用關(guān)鍵字static,在整個程序的執(zhí)行過程中,靜態(tài)函數(shù)只會被執(zhí)行一次。在創(chuàng)建第一個實例或引用任何靜態(tài)成員之前,將自動調(diào)用靜態(tài)構(gòu)造函數(shù)。靜態(tài)構(gòu)造函數(shù)既沒有訪問修飾符,也沒有參數(shù)。【示例5-3】以下代碼在定義的Student類中編寫了靜態(tài)構(gòu)造函數(shù),也編寫了一個實例構(gòu)造函數(shù)。class Student public string name; public int age; public int number; static Student() Console.WriteLine(I am a student.); public Student() Console
56、.WriteLine(I am a student,too.); class TestStudent static void Main(string args) Student s1 = new Student(); Console.ReadKey(); 運行結(jié)果如圖5-6所示。圖5-6 運行結(jié)果圖3. 私有構(gòu)造函數(shù)私有構(gòu)造函數(shù)是一種特殊的實例構(gòu)造函數(shù)。它通常用在只包含靜態(tài)成員的類中,使用關(guān)鍵字private可以將構(gòu)造函數(shù)聲明為靜態(tài)構(gòu)造函數(shù)。如果類具有一個或多個私有構(gòu)造函數(shù)而沒有公共構(gòu)造函數(shù),則其它類(除嵌套類外)無法創(chuàng)建該類的實例?!臼纠?-4】以下代碼在定義的student1類中編寫了私有
57、構(gòu)造函數(shù),在定義的student2類中也編寫了私有構(gòu)造函數(shù)。class student1 public string name; public int age; public int number; public student1() Console.WriteLine(I am a student.); class student2 public string name; public int age; public int number; public student2() Console.WriteLine(I am a student,too.); static void Main(s
58、tring args) student2 s2 = new student2(); Console.ReadKey(); 運行結(jié)果如圖5-7所示。圖5-7 運行結(jié)果圖(三)析構(gòu)方法析構(gòu)方法通常又稱為析構(gòu)函數(shù),是類成員方法中的一個特殊方法,它由帶有“”前綴的類名來聲明,其作用與構(gòu)造函數(shù)相反,用于進(jìn)行清除操作以釋放資源。析構(gòu)函數(shù)具有以下特點。1. 一個類只能有一個析構(gòu)函數(shù)2. 析構(gòu)函數(shù)沒有訪問修飾符,不帶任何參數(shù)。3. 析構(gòu)函數(shù)不能被顯示調(diào)用,它由系統(tǒng)自動調(diào)用。定義析構(gòu)函數(shù)的格式如下。類名() 析構(gòu)函數(shù)的主體部分以下代碼在Student類中聲明了析構(gòu)函數(shù)。public class Student
59、Student() /Destructor body (四)方法重載方法重載是指在同一個類中,存在方法名相同單參數(shù)類型或參數(shù)個數(shù)不全相同的多個方法。即實現(xiàn)方法重載有兩種形式:參數(shù)個數(shù)不同的方法重載和參數(shù)類型不同的方法重載。【示例5-5】構(gòu)造函數(shù)參數(shù)個數(shù)不同的方法重載問題。using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1 class Student public string name; public int age; pu
60、blic int number; public Student() name=未命名; age=0; number=0; public Student(string _name) name=_name; public Student(string _name,int _age) name=_name; age=_age; public Student(string _name,int _age,int _number) name=_name; age=_age; number =_number; public void PrintInformation() Console.WriteLine(
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 智慧圖書館整體解決方案
- 卡姿蘭活動策劃方案
- 音樂教育中的教學(xué)方法創(chuàng)新
- 腫瘤治療藥臨床使用管理
- 沉與浮教案反思
- 氧化碳制取的說課稿
- 市政工程招投標(biāo)授權(quán)委托書
- 橡膠制品損壞賠償指南
- 建筑工程改造系統(tǒng)施工合同范本
- 環(huán)保建設(shè)幼兒園施工合同
- 人教版新目標(biāo)英語八年級下冊《The Present Perfect Tense(復(fù)習(xí)現(xiàn)在完成時) Section A 》說課稿4
- 走近郵政-講中國故事智慧樹知到答案2024年西安郵電大學(xué)
- 腰椎間盤突出癥的中醫(yī)護(hù)理-課件
- JTG F40-2004 公路瀝青路面施工技術(shù)規(guī)范
- 學(xué)位論文復(fù)審申請書范文
- 攝影器材品牌與足球隊贊助協(xié)議
- 社區(qū)積分超市實施方案
- TD/T 1013-2013 土地整治項目驗收規(guī)程(正式版)
- 【傳統(tǒng)文化對提升小學(xué)德育效果的探究結(jié)題報告4600字】
- 我們小點兒聲省公開課一等獎新名師課比賽一等獎?wù)n件
- JT-T 617.2-2018 危險貨物道路運輸規(guī)則 第2部分:分類 含2024年第1號修改單
評論
0/150
提交評論