版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、知識目標(biāo) v(1)掌握結(jié)構(gòu)化的異常處理機制;v(2)深刻理解委托和事件;v(3)掌握枚舉和結(jié)構(gòu);v(4)掌握字符串的常用方法;v(5)掌握正則表達式的基本用法;v(6)掌握常用的集合類和泛型集合類。第1頁/共112頁能力目標(biāo)v(1)能夠捕獲并處理異常;v(2)能使用枚舉或結(jié)構(gòu)描述數(shù)據(jù);v(3)能對文本進行較為復(fù)雜的處理;v(4)能使用正則表達式實現(xiàn)文本的驗證;v(5)能定義和使用委托類型;v(6)能給對象添加事件并能處理事件;v(7)能使用集合類存儲數(shù)據(jù),能編寫基于棧、隊列、鏈表、哈希表等數(shù)據(jù)結(jié)構(gòu)的程序。第2頁/共112頁教學(xué)任務(wù)v任務(wù)1 異常處理v任務(wù)2 枚舉和結(jié)構(gòu)v任務(wù)3 委托和事件v任務(wù)
2、4 字符串與正則表達式v任務(wù)5 泛型和集合第3頁/共112頁單元4 C#進階編程 任務(wù)1 異常處理第4頁/共112頁引例v給定一個計算器程序,捕捉計算器中的異常 class Program static void Main(string args) int flag = 0; Console.WriteLine(請輸入第一個操作數(shù);); int num1 = int.Parse(Console.ReadLine(); Console.WriteLine(請輸入第二個操作數(shù):); int num2 = int.Parse(Console.ReadLine(); int result = 0; C
3、onsole.WriteLine(請輸入運算符(+、-、*、/):); string operater = Console.ReadLine(); if (operater = +) flag = 0; if (operater = -) flag = 1; if (operater = *) flag = 2; if (operater = /) flag = 3; switch (flag) case 0: result = num1 + num2; break; case 1: result = num1 - num2; break; case 2: result = num1 * nu
4、m2; break; case 3: result = num1 / num2; break; Console.WriteLine(num1 + operater + num2 + = + result); Console.ReadKey(); 第5頁/共112頁知識儲備v知識點1:結(jié)構(gòu)化異常處理,trycatchfinally語句。v知識點2:系統(tǒng)異常類。v知識點3:用戶定義異常類。第6頁/共112頁知識點1:結(jié)構(gòu)化異常處理v在C#中,程序中的運行時錯誤使用一種稱為“異常”的機制在程序中傳播。異常由遇到錯誤的代碼引發(fā),由能夠更正錯誤的代碼捕獲。異??捎?NET Framework公共語言運行
5、庫(CLR)或由程序中的代碼引發(fā)。v異常由從Exception派生的類表示,程序中發(fā)生一個異常時,就會生成一個異常類的某種類型的對象。C#中使用try、catch、throw和finally四個關(guān)鍵字來管理的。v1Try/catch塊v2Finally塊第7頁/共112頁異常處理代碼語法格式 Try 語句;Catch(Exception e) 語句; int SafeDivision(int x, int y) try return (x / y); catch (DivideByZeroException dbz) Console.WriteLine(Division by zero att
6、empted!); return 0; /trycatch語句 int a;/ 聲明變量 try / 試圖捕獲異常 / 將文本轉(zhuǎn)換為Int32類型的整數(shù) a = Convert.ToInt32(textBox1.Text); catch / 發(fā)生異常時的處理 Console.WriteLine(提示:請將被除數(shù)的值輸入為數(shù)字!); return; 第8頁/共112頁異常處理FinallyFinally塊 Try 語句;Catch(Exception e) 語句;Finally 語句; int a;/ 聲明變量try / 試圖捕獲異常 / 將文本轉(zhuǎn)換為Int32類型的整數(shù) a = Convert
7、.ToInt32(textBox1.Text);finally Console.WriteLine(感謝你使用本軟件); 第9頁/共112頁異常處理捕獲多個異常Try 語句;Catch(Exception e) 語句;Catch(Exception e) 語句;第10頁/共112頁trycatchfinallytrycatchfinally語句 try /可能會導(dǎo)致異常的語句catch (Exception e) /用于處理異常的語句finally /清理代碼 int a, b, c;try c = a / b; catch (DivideByZeroException) / 如果發(fā)生除數(shù)為0
8、的異常 Console.WriteLine(提示:除數(shù)不能為!);return; finally / 無論是否發(fā)生異常,都正常結(jié)束 Console.WriteLine(感謝使用本軟件!, 程序結(jié)束);第11頁/共112頁知識點2:系統(tǒng)異常類異常類名稱說明MemberAccessException訪問錯誤:類型成員不能被訪問ArgumentException參數(shù)錯誤:方法的參數(shù)無效ArgumentNullException參數(shù)為空:給方法傳遞一個不可接受的空參數(shù)ArithmeticException數(shù)學(xué)計算錯誤:由于數(shù)學(xué)運算導(dǎo)致的異常,覆蓋面廣ArrayTypeMismatchException
9、數(shù)組類型不匹配DivideByZeroException被零除FormatException參數(shù)的格式不正確IndexOutOfRangeException索引超出范圍,小于0或比最后一個元素的索引還大InvalidCastException非法強制轉(zhuǎn)換,在顯式轉(zhuǎn)換失敗時引發(fā)MulticastNotSupportedException不支持的組播:組合兩個非空委派失敗時引發(fā)NotSupportedException調(diào)用的方法在類中沒有實現(xiàn)NullReferenceException引用空引用對象時引發(fā)OutOfMemoryException無法為新語句分配內(nèi)存時引發(fā),內(nèi)存不足OverflowE
10、xception溢出StackOverflowException棧溢出TypeInitializationException錯誤的初始化類型:靜態(tài)構(gòu)造函數(shù)有問題時引發(fā)NotFiniteNumberException無限大的值:數(shù)字不合法第12頁/共112頁知識點3:用戶定義異常類v聲明一個異常類的語法格式如下:v引發(fā)自定義異常的格式如下:vthrow(ExceptionName);v引發(fā)系統(tǒng)異常類的格式如下:vthrow new ;class ExceptionName:Exception static void CopyObject(SampleClass original) if (ori
11、ginal = null) throw new ArgumentException(Parameter cannot be null, original); 第13頁/共112頁引例分析與實現(xiàn)計算器程序異常捕捉 class Program static void Main(string args) int flag = 0; int num1 = 0; int num2 = 0; int result = 0; try Console.WriteLine(請輸入第一個操作數(shù);); num1 = int.Parse(Console.ReadLine(); Console.WriteLine(請輸
12、入第二個操作數(shù):); num2 = int.Parse(Console.ReadLine(); catch (Exception ex) Console.WriteLine(ex.Message); try Console.WriteLine(請輸入運算符(+、-、*、/):); string operater = Console.ReadLine(); if (operater = +) flag = 0; if (operater = -) flag = 1; if (operater = *) flag = 2; if (operater = /) flag = 3; switch (f
13、lag) case 0: result = num1 + num2; break; case 1: result = num1 - num2; break; case 2: result = num1 * num2; break; case 3: result = num1 / num2; break; Console.WriteLine(num1 + operater + num2 + = + result); catch (Exception ex) Console.WriteLine(ex.Message); Console.ReadKey(); 第14頁/共112頁歸納總結(jié)v知識要點:
14、v(1)trycatch語句;v(2)多重catch語句;v(3)嵌套異常結(jié)構(gòu);v(4)系統(tǒng)級異常類的基類Exception,常用系統(tǒng)異常類;v(5)用戶定義異常類。第15頁/共112頁拓展實踐v對前面完成的猜數(shù)字游戲進行合理的異常捕捉。第16頁/共112頁單元4 C#進階編程任務(wù)2 枚舉和結(jié)構(gòu)第17頁/共112頁引例v存儲和讀取一組學(xué)生的基本信息。第18頁/共112頁知識儲備v知識點1:使用枚舉描述數(shù)據(jù)。v知識點2:使用結(jié)構(gòu)描述數(shù)據(jù)。v知識點3:結(jié)構(gòu)與類的區(qū)別。第19頁/共112頁知識點1:使用枚舉描述數(shù)據(jù)v枚舉可以理解為一組常數(shù)的集合,并限定了常數(shù)的范圍。v枚舉是派生自System.Enu
15、m的一種獨特的值類型。每種枚舉類型均有一種基礎(chǔ)類型,此基礎(chǔ)類型可以是出char類型以外的任何整型。枚舉元素的默認(rèn)基礎(chǔ)類型為int,默認(rèn)情況第一個枚舉元素的值為,后面每個元素一次遞增1。第20頁/共112頁示例:實現(xiàn)學(xué)員按學(xué)習(xí)方向分類v強制指定枚舉元素的值。 enum Direction Design, Business, Testing, Game enum Direction Design = 1, Business = 2, Testing = 4, Game 第21頁/共112頁實踐任務(wù)1v定義枚舉,用來描述彩虹的顏色。第22頁/共112頁知識點2:使用結(jié)構(gòu)描述數(shù)據(jù)v結(jié)構(gòu)的定義語法中使用
16、struct關(guān)鍵字,格式如下:v結(jié)構(gòu)內(nèi)容包括,構(gòu)造函數(shù)、常數(shù)、字段、方法、屬性、索引器、運算符和嵌套類型等。其中屬性是無法初始化的,除非聲明為const或static。struct 結(jié)構(gòu)名 /結(jié)構(gòu)內(nèi)容第23頁/共112頁示例:定義一個結(jié)構(gòu)來解決學(xué)生信息的存儲 struct Student public int no; public string name; public string sex; public Direction direction; public int credit; public bool isGraduate; public string Status() if (isG
17、raduate) return 畢業(yè); else return 在讀; 第24頁/共112頁【例4-1】描述電影票的數(shù)據(jù)信息 struct Ticket Name name; DateTime datetime; string hall; string seat; string type; string remark; decimal price; enum Name 哈利波特1, 哈利波特2, 哈利波特3, 哈利波特4 第25頁/共112頁實踐任務(wù)2v定義一個游戲角色結(jié)構(gòu)。第26頁/共112頁知識點3:結(jié)構(gòu)與類的區(qū)別v在C#中結(jié)構(gòu)和類大部分是一樣的,結(jié)構(gòu)擁有的成員和類也是一致的,二者唯一的差
18、別在與存儲位置不同。v類是引用類型,而結(jié)構(gòu)是值類型。引用類型在堆中分配,內(nèi)存管理由垃圾回收器處理。值類型在堆棧上或以內(nèi)聯(lián)方式分配,且在超出范圍時釋放。通常,值類型的分配和釋放開銷更小。然而,如果在要求大量的裝箱和取消裝箱操作的情況下使用,則值類型的表現(xiàn)就不如引用類型。第27頁/共112頁微軟建議在以下情況下才使用結(jié)構(gòu):v數(shù)據(jù)在邏輯上表示單個值,與基元類型(整型、雙精度型等)類似。v數(shù)據(jù)的實例大小小于 16 字節(jié)。v數(shù)據(jù)是不可變的。v數(shù)據(jù)將不必頻繁被裝箱第28頁/共112頁引例分析與實現(xiàn)v一個結(jié)構(gòu)可以存儲一個學(xué)生的信息,當(dāng)有多個學(xué)員信息要存儲時,使用多個結(jié)構(gòu)就可以實現(xiàn),遇到重復(fù)的數(shù)據(jù)類型的時候我
19、們可以使用數(shù)組來完成,定義學(xué)員數(shù)組如下:vStudent student=new Student3;v數(shù)組的初始化,我們使用for循環(huán)從鍵盤讀入。 enum Direction Design, Business, Testing, Game struct Student public int no; public string name; public string sex; public Direction direction; public int credit; public bool isGraduate; public string Status() if (isGraduate)
20、return 畢業(yè); else return 在讀; class Program static void Main(string args) Student students = new Student2; for (int i = 0; i b) return a; else return b; public double DoubleMax(double a, double b) if (a b) return a; else return b; class Test static void Main() Max max; MaxData md = new MaxData(); max =
21、 new Max(md.IntMax);/實例化委托 第38頁/共112頁知識點3:調(diào)用委托v調(diào)用委托即是用委托對方法進行實例化,調(diào)用委托與調(diào)用方法類似,唯一的區(qū)別在于不是調(diào)用委托的實現(xiàn),而是調(diào)用委托關(guān)聯(lián)的方法。 class Test static void Main() Max max; MaxData md = new MaxData(); max = new Max(md.IntMax); int a = max(2, 3);/調(diào)用委托 Console.WriteLine(a.ToString(); /max = new Max(md.DoubleMax);/錯誤代碼,返回類型錯誤 /d
22、ouble b =max(2.0, 3.0);/重載與委托不匹配 /Console.WriteLine(b.ToString(); Console.ReadKey(); 第39頁/共112頁實踐任務(wù)1v使用委托實現(xiàn)三個數(shù)求最大值和最小值。第40頁/共112頁知識點4:多播委托v前面介紹的委托中,每個委托都只包含一個方法的調(diào)用,在這種情況下,使用委托還不如直接使用方法來的直接,其實委托也可以包含多個方法,這個委托稱為多播委托。v調(diào)用多播委托就可以連續(xù)調(diào)用多個方法,但委托的定義的返回類型必須是void,而編譯器在返回類型為void時,就會自動假定這是一個多播委托。v多播委托可以識別運算符+和+=,
23、表示在委托中增加方法的調(diào)用,多播委托還識別運算符-和-=,表示從委托刪除方法調(diào)用。第41頁/共112頁示例:delegate void Del(string s); class TestClass static void Hello(string s) System.Console.WriteLine( Hello, 0!, s); static void Goodbye(string s) System.Console.WriteLine( Goodbye, 0!, s); static void Main() Del a, b, c, d; / Create the delegate ob
24、ject a that references / the method Hello: a = Hello; / Create the delegate object b that references / the method Goodbye: b = Goodbye; / The two delegates, a and b, are composed to form c: c = a + b; / Remove a from the composed delegate, leaving d, / which calls only the method Goodbye: d = c - a;
25、 System.Console.WriteLine(Invoking delegate a:); a(A); System.Console.WriteLine(Invoking delegate b:); b(B); System.Console.WriteLine(Invoking delegate c:); c(C); System.Console.WriteLine(Invoking delegate d:); d(D); 第42頁/共112頁知識點5:事件的定義vC#使用delegate和event關(guān)鍵字提供了一個簡潔的事件處理方案。C#中類和對象可以通過事件向其他類或?qū)ο笸ㄖl(fā)生的相
26、關(guān)事情。將發(fā)生的事件通知給其他對象的對象稱為發(fā)行者,一個對象訂閱事件后,該對象成為訂閱者。一個事件可以有一個或者多個訂閱者,事件的發(fā)行者也可以是該事件的訂閱者。第43頁/共112頁事件定義的語法vevent關(guān)鍵字用在發(fā)行者類中聲明事件。定義事件時,發(fā)行者首先定義委托,然后根據(jù)該委托定義事件。 訪問修飾符 event 委托名 事件名 public delegate void EventHandler(Object sender, EventArgs e); public event EventHandler NoDataEventHandler;第44頁/共112頁事件具有以下特點:v發(fā)行者確定
27、何時引發(fā)事件,訂戶確定執(zhí)行何種操作來響應(yīng)該事件。v一個事件可以有多個訂戶,一個訂戶可以處理來自多個發(fā)行者的多個事件。v沒有訂戶的事件永不被調(diào)用。第45頁/共112頁知識點6:訂閱和引發(fā)事件v訂閱事件v訂閱事件只是添加了一個委托,當(dāng)引發(fā)事件時,該委托將調(diào)用一個方法。訂閱事件的形式如下:v代碼中,ex對象訂閱了事件NoDataEventHandler。當(dāng)事件NoDataEventHandler被引發(fā)時,則會執(zhí)行名為ex_NoDataEventHandler的方法。 EventExample ex = new EventExample(); ex.NoDataEventHandler += new
28、EventExample.EventHandler(ex_NoDataEventHandler);第46頁/共112頁引發(fā)事件v引發(fā)事件和調(diào)用方法類似,引發(fā)事件時,將調(diào)用訂閱此特定事件的對象的所有委托,如果沒有對象訂閱該事件,則事件引發(fā)時,會發(fā)生異常。第47頁/共112頁【例4-2】比較兩個數(shù)的大小。 class EventExample public delegate void DelegateMax(int first, int second); public event DelegateMax EventMax; public void IntMax(int a, int b) Cons
29、ole.WriteLine(判斷兩個數(shù)的大小0和1,較大的是:, a, b); EventMax(a, b); class Test static void Main() EventExample ee = new EventExample(); ee.EventMax += new EventExample.DelegateMax(ee_EventMax);/訂閱事件 ee.IntMax(2, 3);/引發(fā)事件 Console.ReadKey(); static void ee_EventMax(int first, int second) if (first second) Console
30、.WriteLine(first); else Console.WriteLine(second); 第48頁/共112頁實踐任務(wù)2v為實踐任務(wù)1中的委托定義事件、訂閱事件及激發(fā)事件。第49頁/共112頁引例分析與實現(xiàn)v官兵抓強盜實現(xiàn),當(dāng)受害人呼喊“救命”的時候,只有強盜和官兵才有相應(yīng)的行動,其他的無行動。 class Robber public void runaway() Console.WriteLine(逃跑); class Police public void chase() Console.WriteLine(哪里跑); class Human public delegate vo
31、id humandelegate(); public event humandelegate humanevent; public void Help() humanevent(); class Program static void Main(string args) Human h = new Human(); Robber r1 = new Robber(); Robber r2 = new Robber(); Police p1 = new Police(); Police p2 = new Police(); h.humanevent += new Human.humandelega
32、te(h_humanevent); h.humanevent += r1.runaway; h.humanevent += r2.runaway; h.humanevent += p1.chase; h.humanevent += p2.chase; h.Help(); Console.ReadKey(); static void h_humanevent() Console.WriteLine(救命啊); 第50頁/共112頁歸納總結(jié)v知識要點:v(1)委托類型定義方法。v(2)委托的使用。v(3)定義事件、訂閱事件和激發(fā)事件。第51頁/共112頁拓展實踐v為汽車類設(shè)計“加油”事件。第52頁
33、/共112頁單元4 C#進階編程任務(wù)4 字符串與正則表達式第53頁/共112頁引例實現(xiàn)對詩詞的排版v實現(xiàn)對字符串的高級操作。編寫一個程序,實現(xiàn)對詩詞進行格式處理。為詩詞添加詩名,并將句號后的詩句做換行處理,并將文本中的半角符號替換成為全角符號。怒發(fā)沖冠,憑闌處,瀟瀟雨歇.抬望眼,仰天長嘯,壯同激烈.三十功名塵與土,八千里路云和月.莫等閑,白了少年頭,空悲切.靖康恥,猶未雪;臣子憾,何時滅.駕長車踏破,賀蘭山缺.壯志饑餐胡虜肉,笑談渴飲匈奴血.待從頭,收拾舊山河,朝天闕.第54頁/共112頁知識儲備v知識點1:String類的使用。v知識點2:StringBuilder類的使用。v知識點3:格式
34、化字符串。v知識點4:字符串和其他類型間的轉(zhuǎn)換。v知識點5:正則表達式規(guī)范。v知識點6:Regex類。第55頁/共112頁知識點1: String類的使用v在C中,可以使用兩種類型的字符串,一種是String類的實例,另一種是StringBuilder類的實例;前者是不可更改的字符串,后者是可更改的字符串;這兩種類型的字符串可以相互轉(zhuǎn)換。vString類型的字符串比StringBuilder類型的字符串使用起來更方便,但當(dāng)在程序中需要對字符串進行大量的修改時,一般應(yīng)使用StringBuilder類型的字符串以提高程序的性能。第56頁/共112頁String類v字符串是由被當(dāng)作一個整體處理的一系
35、列字符組成的。一個字符串中包含的字符可以是大、小寫英文字母、漢字、數(shù)字、以及*、#等特殊符號。首先了解一下字符。v字符是組成C#程序代碼的基本元素。源程序通常由字符組成,把一些字符按照一定意義組合,然后由編譯器翻譯成機器指令就可以完成指定的任務(wù)。除了普通字符之外,在程序中還包含著字符常量。字符常量可由一個整數(shù)值來表示,該值被稱作字符碼。例如,換行符n可用整數(shù)122來表示。字符常量是建立在Unicode字符集基礎(chǔ)之上的,Unicode字符集是一個通用的字符集,其中包含的符號和字母數(shù)量超過了ASCII字符集。第57頁/共112頁vC#當(dāng)中的字符串分為兩種:一種是不可變字符串,另一種是可變字符串。v
36、其中,不可變字符串是System命名空間中String類的對象(在前面的許多程序中用到的“string”關(guān)鍵字是String類的別名,即在C#程序中,可以在需要使用String的地方改用string替換),在前面的程序示例中用到的字符串大多都是這種類型的字符串;v可變字符串是System.Text命名空間中StringBuilder類的對象。第58頁/共112頁vC#中的String類類似于C+中的string類型,但String類提供了更多的功能,有很多比較、讀取和搜索String對象的內(nèi)容的方法。v雖然String類的功能很強,但String類型的字符串仍是不可改變的,也就是說,一旦創(chuàng)建了
37、String類的對象實例,就不能夠再修改該實例了。第59頁/共112頁v表面上看來能夠修改字符串的所有方法其實都不能夠修改已創(chuàng)建的String類對象實例,它們實際上是在原有String類對象實例的基礎(chǔ)上創(chuàng)建了新的String類對象實例。v使用字符串時,有時會在字符串中包含一些特殊的字符,例如字符,這種情況下,需要使用轉(zhuǎn)義符,將轉(zhuǎn)義符后面的字符作為原義字符處理。另外還可以使用字符放在原義字符前,此時,符號相當(dāng)于整個字符串的轉(zhuǎn)義。例如:字符串”c:abc”等價于”c:abc”。第60頁/共112頁知識點2:StringBuilder類的使用vString類型的字符串是不能修改的,如果要向Strin
38、g類型的字符串后面追加一個字符串,那么結(jié)果將是,用原有的字符串和要追加的字符串創(chuàng)建一個新的字符串,由于String類型的字符串的不可改變性,當(dāng)程序中需要執(zhí)行大量的字符串操作時,字符串的不可改變性將會導(dǎo)致程序的性能下降。v但在C#中,還可以使用StringBuilder類型的字符串,它們是可以修改的,當(dāng)需要完成大量的工作來修改字符串時,使用StringBuilder類型的字符串是最好的選擇。 StringBuilder的命名空間是System.Text。第61頁/共112頁追加字符串vStringBuilder類最基本的用途就是進行字符串串聯(lián),也就是通過多個字符和其他值來建立目標(biāo)字符串。 Str
39、ingBuilder類提供了Append方法來將一些值追加到當(dāng)前字符串的結(jié)尾處。v除了能夠?qū)⒁恍┲底芳拥疆?dāng)前字符串之外,使用StringBuilder類的AppendFormat方法還能夠追加格式化的字符串,有了AppendFormat方法,就不必再使用string類的Format方法,因而也就無需再創(chuàng)建多余的字符串了。第62頁/共112頁插入字符串v字符串的插入是StringBuilder類提供的另一個常用方法。插入字符串所用的Insert方法具有多個重載形式,其中的幾種為:vInsert(int,bool)vInsert(int,char)vInsert(int,char)vInsert(
40、int,Object)vInsert(int,string,countInt)vInsert(int,char,beginInt,numberInt)第63頁/共112頁替換字符串v有時,會遇到這樣的情況:在模板的基礎(chǔ)上生成字符串,并用一些值來替換模板中的標(biāo)記或子字符串。事實上,VS.NET也是這樣工作的。每個項目都是在一個模板文件的基礎(chǔ)上創(chuàng)建的,新創(chuàng)建的源代碼文件也是從一個模板生成的,然后根據(jù)項目類型、項目名稱以及其他選項來替換文件中的各種標(biāo)記。使用StringBuilder類的Replace方法也可以實現(xiàn)同樣的效果,它能將字符串中所有指定的字符或字符串替換為其他指定的字符或字符串。第64頁
41、/共112頁知識點3:格式化字符串,DateTime類,v當(dāng)使用Console.WriteLine()方法進行輸出時,除非執(zhí)行了特殊的格式化操作,否則任何格式的字符串都會默認(rèn)為字符串類型。通常,各種不同類型的數(shù)據(jù),例如,數(shù)字、字符串和日期等,需要進行更為完善的格式化。v使用基本的字符串格式化可以將數(shù)據(jù)插入到字符串中的某些位置。這些插入位置是由帶有序號的占位符來表示的,這些序號對應(yīng)于插入項的順序。第65頁/共112頁格式化字符串v字符串string的基本格式化原型如下:v其中format是包含一個或多個占位符的字符串,其基本的形式如下。v“01“,標(biāo)有序號的占位符都是從0開始編號的,對應(yīng)給后面的
42、參數(shù)arg的插入次序,最后Format方法返回一個帶格式的字符串。 string sring.Format(string format,object arg0,object arg1,);第66頁/共112頁標(biāo)準(zhǔn)日期和時間格式說明符標(biāo)準(zhǔn)日期和時間格式說明符格式說明符格式說明符名稱說明基本形式d短日期模式“MM/dd/yyyy”0:dD長日期模式“dddd, dd MMMM yyyy”0:Dt短時間模式“HH:mm“0:tT長時間模式“HH:mm:ss“0:Tf完整日期/時間模式(短時間)“dddd, dd MMMM yyyy HH:mm”0:fF完整日期/時間模式(長時間)“dddd, dd
43、MMMM yyyy HH:mm:ss”0:FM或或m月和日模式“dd MMMM“0:mY或或y年和月模式“MMMM yyyy“0:y數(shù)字格式字符串?dāng)?shù)字格式字符串格式說明符格式說明符名稱說明基本形式C或或c貨幣數(shù)據(jù)前加貨幣符號0:cE或或e科學(xué)計數(shù)法科學(xué)計數(shù)法0:eF或或f定點帶兩位小數(shù)輸出0:fN或或n數(shù)字千位帶逗號分隔符0:nP或或p百分比以百分比顯示0:pX或或x十六進制數(shù)以大(?。懯M制數(shù)顯示0:X或0:x第67頁/共112頁【例4-3】請輸出如下格式的商品信息。貨號貨號商品名稱商品名稱進貨價(元)進貨價(元)利潤率利潤率售價(元)售價(元)0001X洗發(fā)水¥10.0050.00%¥
44、15.00 class Program static void Main(string args) string id = 0001; string name = X洗發(fā)水; decimal inprice = 10M; float profit = 0.5f; decimal outprice = 15M; Console.WriteLine(0,25, 商品表); string s = string.Format(0,-101,-102,-10:¥0.03,-10:0.00%4,-10:¥0.0, id, name, inprice, profit, outprice); Console.
45、WriteLine(s); Console.ReadKey(); 第68頁/共112頁DateTime類vC#中的DateTime類提供了一些常用的日期時間方法與屬性,該類屬于System命名空間。對于以當(dāng)前日期時間為參照的操作,可以使用該類的Now屬性及其方法。v日期時間類的Now屬性的常用方法格式為:v日期時間類的Now屬性的常用屬性格式為:第69頁/共112頁【例4-4】取系統(tǒng)當(dāng)前的日期和時間,請依次輸出該日期的長日期和時間、年、月、日、時、分、秒,以及星期數(shù)。 class Program static void Main(string args) DateTime dt = DateT
46、ime.Now; Console.WriteLine(長日期時間:0,10:f, dt); Console.WriteLine(年:0,10:yyyy, dt); Console.WriteLine(月:0,10:MM, dt); Console.WriteLine(日:0,10:dd, dt); Console.WriteLine(時:0,10:hh, dt); Console.WriteLine(分:0,10:mm, dt); Console.WriteLine(秒:0,10:ss, dt); Console.WriteLine(星期:0,5:dddd, dt); Console.Read
47、Key(); 第70頁/共112頁知識點4:字符串和其他類型間的轉(zhuǎn)換。方法格式說明示例示例結(jié)果Convert.ToBoolean(數(shù)字); 數(shù)值轉(zhuǎn)換為布爾型Convert.ToBoolean(1);trueConvert.ToBoolean(字符串); 字符串轉(zhuǎn)換為布爾型Convert.ToBoolean(false); falseConvert.ToByte(數(shù)字字符串);字符串轉(zhuǎn)換為無符號字節(jié)型Convert.ToByte(1); 1Convert.ToChar(數(shù)值);轉(zhuǎn)換ASCII碼值為對應(yīng)字符Convert.ToChar(65);AConvert.ToDecimal(數(shù)字字符串);字
48、符串轉(zhuǎn)換為十進制數(shù)值Convert.ToDecimal(1.1);1.1Convert.ToInt16(數(shù)字字符串); 字符串轉(zhuǎn)換為短整型數(shù)值Convert.ToInt16(-1); -1Convert.ToInt32(數(shù)字字符串);字符串轉(zhuǎn)換為整型數(shù)值Convert.ToInt32(-1);-1Convert.ToInt64(數(shù)字字符串);字符串轉(zhuǎn)換為長整型數(shù)值Convert.ToInt64(-1); -1Convert.ToSByte(數(shù)字字符串); 字符串轉(zhuǎn)換為有符號字節(jié)型數(shù)值Convert.ToSByte(-1); -1Convert.ToSingle(數(shù)字字符串);字符串轉(zhuǎn)換為單精度
49、型數(shù)值Convert.ToSingle(1.1);1.1Convert.ToDouble(數(shù)字字符串);字符串轉(zhuǎn)換為雙精度型數(shù)值Convert.ToDouble(1.1);1.1Convert.ToString(各種類型數(shù)據(jù));其他類型轉(zhuǎn)換為字符串Convert.ToString(DateTime.Now);2012-12-16 12:18:31第71頁/共112頁知識點5:正則表達式規(guī)范v正則表達式的概念:v正則表達式是一種用來描述一定數(shù)量文本的模式第72頁/共112頁正則表達式的構(gòu)成-基本的語法字符vd 0-9的數(shù)字vD d的補集(以所有字符為全集,下同),即所有非數(shù)字的字符vw 單詞字符
50、,指大小寫字母、0-9的數(shù)字、下劃線vW w的補集vs 空白字符,包括換行符n、回車符r、制表符t、垂直制表符v、換頁符fvS s的補集v. 除換行符n外的任意字符v 匹配內(nèi)所列出的所有字符v 匹配非內(nèi)所列出的字符第73頁/共112頁正則表達式的構(gòu)成-定位字符v“定位字符”所代表的是一個虛的字符,它代表一個位置,你也可以直觀地認(rèn)為“定位字符”所代表的是某個字符與字符間的那個微小間隙。v 表示其后的字符必須位于字符串的開始處v$ 表示其后的字符必須位于字符串的結(jié)束處vb 匹配一個的單詞的邊界vB 匹配一個非單詞的邊界v另外,還包括:A前面的字符必須位于字符串的開始處,z前面的字符必須位于字符串的
51、結(jié)束處,Z前面的字符必須位于字符串的結(jié)束處,或者位于換行符前第74頁/共112頁正則表達式的構(gòu)成-重復(fù)描述字符v“重復(fù)描述字符”是體現(xiàn)C#正則表達式強大的地方之一:vn 匹配前面的字符n次vn, 匹配前面的字符n次或多于n次vn,m 匹配前面的字符n到m次v? 匹配前面的字符0或1次v+ 匹配前面的字符1次或多于1次v* 匹配前面的字符0次或多于0次第75頁/共112頁【例4-5】使用正則表達式實現(xiàn)下述要求:v(1)驗證輸入字符是否為大寫字母 vA-Z+$v(2)驗證小數(shù)是否正確 v0-9+(.0-92)?$v(3)驗證身份證號是否正確 (d18$)|(d15$)第76頁/共112頁知識點6:
52、Regex類v所在命名空間:vRegex類表示只讀正則表達式類。包含各種靜態(tài)方法,其中比較重要的有IsMatch()方法第77頁/共112頁【例4-6】判斷輸入的金額格式是否正確。 public static class RegLibrary public static bool IsNumber(string v) return Regex.IsMatch(v, (-?d+)(.d+)?$) ? true : false; class Test static void Main() Console.WriteLine(請輸入金額); string s = Console.ReadLine()
53、; if (RegLibrary.IsNumber(s) Console.WriteLine(輸入格式正確); else Console.WriteLine(輸入格式不正確); Console.ReadKey(); 第78頁/共112頁實踐任務(wù)v使用正則表達式實現(xiàn)Email格式的判斷。第79頁/共112頁引例分析與實現(xiàn)v對詩詞進行排版 class Poem string poem = 怒發(fā)沖冠,憑闌處,瀟瀟雨歇.抬望眼,仰天長嘯,壯同激烈.三十功名塵與土,八千里路云和月.莫等閑,白了少年頭,空悲切.靖康恥,猶未雪;臣子憾,何時滅.駕長車踏破,賀蘭山缺.壯志饑餐胡虜肉,笑談渴飲匈奴血.待從頭,收
54、拾舊山河,朝天闕.; public StringBuilder ChangePoem() StringBuilder sb = new StringBuilder(poem); string s = sb.ToString(); for (int i = s.Length - 1; i = 0; i-) if (si = . | si = ;) sb.Insert(i + 1, n); sb.Insert(0, 滿江紅n); sb.Replace(, ,); sb.Replace(., 。); return sb; class Program static void Main(string a
55、rgs) Poem po = new Poem(); Console.WriteLine(重新排版后的詩詞:); Console.WriteLine(po.ChangePoem(); Console.ReadKey(); 第80頁/共112頁歸納總結(jié)v知識要點:v(1)需要改變字符串本身時,使用StringBuilder類;v(2)String類的方法;v(3)StringBuilder類的方法;v(4)格式化字符串,String.Format();v(5)字符串和其他類型的轉(zhuǎn)換,Convert類;v(6)正則表達式規(guī)范;v(7)Regex類使用。第81頁/共112頁拓展實踐v簡單點菜程序。根
56、據(jù)客人的點菜,生成每日的菜單,并顯示每單菜的總額第82頁/共112頁單元4 C#進階編程任務(wù)5 泛型和集合第83頁/共112頁引例v實現(xiàn)簡單迷宮。尋找一條從入口到出口的通路。第84頁/共112頁知識儲備v知識點1:非泛型集合。v知識點2:泛型概述。v知識點3:泛型集合。第85頁/共112頁集合概述v如果對象可以提供對相關(guān)對象的引用,那么它就是一個集合 ,它可以遍歷集合中的每個數(shù)據(jù)項;v專業(yè)的說法是所有實現(xiàn)了接口的類的對象都是集合。 v數(shù)據(jù)集合類都位于System.Collections命名空間中。第86頁/共112頁知識點1:非泛型集合v常用集合類型1. ArrayList類2. Stack類
57、3.Queue類4.Hashtable類第87頁/共112頁集合優(yōu)點v數(shù)組Array是固定大小的,不能伸縮;而集合卻是可變長的。v數(shù)組要聲明元素的類型,集合類的元素類型卻是object。v數(shù)組可讀可寫不能聲明只讀數(shù)組。集合類可以提供ReadOnly方法以只讀方式使用集合。第88頁/共112頁集合屬性v修改或者獲取ArrayList的容量v使用Capacity屬性,通過設(shè)置該屬性的值可以修改ArrayList的容量;讀取該屬性的值可以獲取ArrayList的容量v當(dāng)為ArrayList對象添加的數(shù)據(jù)元素的個數(shù)超出初始化時指定的數(shù)據(jù)項個數(shù)時,ArrayList對象的容量還可以自動增長默認(rèn)增長后的容
58、量為原來的2倍,即數(shù)據(jù)項的個數(shù)為初始化時的2倍。第89頁/共112頁ArrayList常用的屬性和方法如下表所示屬性屬性說明說明Capacity獲取或設(shè)置集合可包含的元素數(shù)Count獲取集合中實際包含的元素數(shù)方法方法說明Add將元素添加到集合的結(jié)尾處Clear從集合中移除所有元素CopyTo將ArrayList或它的一部分復(fù)制到一維數(shù)組中Insert將元素插入到集合的指定索引處Remove從集合中移除特定值的第一個匹配項RemoveAt移除集合中指定索引處的元素Reverse將集合中元素的順序反轉(zhuǎn)Sort將集合或集合的一部分進行排序第90頁/共112頁【例4-7】歌唱比賽計分器。從鍵盤輸入評委
59、打出的分?jǐn)?shù),去掉一個最高分和一個最低分,顯示平均分。 class Score ArrayList al = new ArrayList(); public void AddMark() int i = 0; while (true) Console.WriteLine(請輸入評為分?jǐn)?shù),以-1結(jié)束); i = int.Parse(Console.ReadLine(); if (i != -1) al.Add(i); else break; public void Del() if (al.Count 2) al.Sort(); al.RemoveAt(0); al.RemoveAt(al.Cou
60、nt - 1); public double Average() double sum = 0; foreach (int i in al) sum += i; return sum / al.Count; class Program static void Main(string args) Score s = new Score(); s.AddMark(); s.Del(); Console.WriteLine(平均分是0, s.Average(); Console.ReadKey(); 第91頁/共112頁Queue類vQueue是先進先出的集合類,也成為隊列。隊列的特性是一端進,一端
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)業(yè)科技園區(qū)種植項目合作合同
- 大拖拉機配件購銷合同
- 搭棚施工合同范本
- 委托房地產(chǎn)開發(fā)合同書模板
- 正規(guī)區(qū)域代理合同范本
- 房地產(chǎn)開發(fā)承包合同
- 國際貿(mào)易進出口英文合同范本
- 個人房屋裝修合同標(biāo)準(zhǔn)范文
- 公共廁所的管理制度
- 白酒購買合同模板范文
- 小兒高熱驚厥課件
- 陜西省2024年中考語文真題試卷【附答案】
- 河南省鄭州市二七區(qū)2023-2024學(xué)年七年級下學(xué)期期末考試語文試題
- JB-T 8532-2023 脈沖噴吹類袋式除塵器
- 電網(wǎng)兩票培訓(xùn)課件
- 山東省濟寧市2023年中考數(shù)學(xué)試題(附真題答案)
- 班組建設(shè)工作匯報
- 供應(yīng)鏈金融與供應(yīng)鏈融資模式
- 工程類工程公司介紹完整x
- 板帶生產(chǎn)工藝熱連軋帶鋼生產(chǎn)
- 輪機備件的管理(船舶管理課件)
評論
0/150
提交評論