《C#語言程序設計(第3版)》教學課件-第三部分_第1頁
《C#語言程序設計(第3版)》教學課件-第三部分_第2頁
《C#語言程序設計(第3版)》教學課件-第三部分_第3頁
《C#語言程序設計(第3版)》教學課件-第三部分_第4頁
《C#語言程序設計(第3版)》教學課件-第三部分_第5頁
已閱讀5頁,還剩107頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

C#語言程序設計鄭宇軍《C#語言程序設計(第3版)》清華大學出版社面向對象的C#第6章深入理解類第6章深入理解類面向對象的方法學構造函數和析構函數屬性索引函數事件操作符重載

this關鍵字

幾個常用類面向對象的方法學面向過程的方法功能與數據別離自頂向下的分析基于模塊的設計面向對象的方法數據+操作對象對象+類+繼承+通信面向對象的方法學對象類〔抽象化〕Shape面向對象的方法學對象類〔抽象化〕類對象〔具體化〕王艷2年級3班劉強5年級1班范小飛2年級1班Student面向對象的方法學繼承ShapeTriangleRectangleEllipseSquarePolygonCircle面向對象的方法學面向對象的建模對象模型/功能模型/動態(tài)模型面向對象的需求分析論域分析/應用分析面向對象的設計問題論域/用戶界面/任務管理/數據管理相關參考書類的成員數據成員字段方法成員普通方法構造函數和析構函數屬性索引函數事件操作符構造函數與析構函數構造函數:創(chuàng)立對象時調用析構函數:對象銷毀時調用在程序中調用CLR自動調用構造函數與析構函數構造函數默認構造函數publicclassBankCard{

privatestringid;privatedecimalmoney;}BankCardcard1=newBankCard();構造函數與析構函數構造函數默認構造函數無參構造函數publicclassBankCard{

privatestringid;privatedecimalmoney;publicBankCard(){money=10;}}BankCardcard1=newBankCard();構造函數與析構函數構造函數默認構造函數無參構造函數帶參構造函數publicclassBankCard{

privatestringid;privatedecimalmoney;publicBankCard(strings){

id=s;}}BankCardcard1=newBankCard(“001”);構造函數與析構函數構造函數默認構造函數無參構造函數帶參構造函數私有/保護構造函數:不可用于對象創(chuàng)立構造函數與析構函數析構函數銷毀對象無參數、無返回值、無修飾符由CLR自動調用publicclassBankCard{

privatestringid;

privatedecimalmoney;privatestaticintobjects=0;

publicBankCard(decimalm)

{

money=m;id=(++objects).ToString();}~BankCard(){objects--;}}構造函數與析構函數實例構造函數:對象初始化靜態(tài)構造函數:類的初始化publicclassBankCard//續(xù){

privatestringid;

privatedecimalmoney;privatestaticintobjects=0;privatestaticintclasses=0;staticBankCard()

{

classes++;}}構造函數與析構函數程序開發(fā)例如屬性封裝對對象單個“特性”的訪問在本質上是方法屬性封裝對字段的訪問get訪問器:讀取set訪問器:設置publicclassBankCard{

privatestringid;privatedecimalmoney;publicstringId

{get{returnid;}}publicdecimalMoney

{

get{returnmoney;}set{money=value;}}}BankCardcard1=newBankCard();Console.WriteLine(card1.Id);card1.Money=600;所設置的值屬性程序開發(fā)例如索引函數封裝對對象一組“特性”的訪問類似于數組的訪問方式索引函數支持下標形式的訪問get訪問器:讀取set訪問器:設置publicclassPrim{int[]x={1,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47};publicintthis[intindex]{get{returnx[index];}set{x[index]=value;}}}Primp=newPrim();for(inti=0;i<5;i++)Console.WriteLine(p[i]);索引值索引函數程序開發(fā)例如事件對象之間的通信一個對象調用另一個對象的效勞——方法一個對象自動對其它對象的變化作出反響——事件25delegatevoidBookHandler(stringbook);publicclassBookStore{publiceventBookHandlerOnNewBook;

publicvoidNewBook(stringbook){OnNewBook(book);}}事件成員定義事件引發(fā)方法事件事件發(fā)布與訂閱發(fā)布者委托原型定義26publicclassCustomer{publicvoidRegister(BookStorestore){store.OnNewBook+=newBookHandler(store_OnNewBook);}

voidstore_OnNewBook(stringbook)

{Console.WriteLine(“書店新到新書“+book);}}事件綁定事件處理方法事件事件發(fā)布與訂閱發(fā)布者訂閱者27publicclassCustomer{publicvoidRegister(BookStorestore){store.OnNewBook+=store_OnNewBook;}

voidstore_OnNewBook(stringbook)

{Console.WriteLine(“書店新到新書“+book);}}事件綁定事件處理方法事件事件發(fā)布與訂閱發(fā)布者訂閱者發(fā)布者(BookStore)觸發(fā)器(NewBook)事件(OnNewBook)訂閱者(Customer)事件注冊Store_OnNewBookdelegateBookHandler事件事件發(fā)布與訂閱事件處理方法Store_OnNewBook29事件事件發(fā)布與訂閱EventHandler:作為大局部事件的通用原型delegatevoidBookHandler(stringbook);publicclassBookStore{publiceventEventHandlerOnNewBook;

publicvoidNewBook(stringbook){OnNewBook(book);}}30事件事件發(fā)布與訂閱EventHandler:作為大局部事件的通用原型Windows控件事件protectedvirtualvoidOnClick(EventArgse){if(Click!=null)Click(this,e);}privatevoidbutton1_Click(objectsender,EventArgse){MessageBox.Show("您好");}Windows控件事件程序開發(fā)例如事件預定義操作符

自定義操作符操作符重載publicclassComplex{publicdoublea;

publicdoubleb;

publicstaticComplexoperator+(Complexc1,Complexc2){returnnewComplex(){a=c1.a+c2.a,b=c1.b+c2.b};}}Complexc1=newComplex(){a=1.5,b=2.5};Complexc2=newComplex(){a=6,b=-3};Complexc3=c1+c2;預定義操作符

自定義操作符publicstaticToperator++(Tt)publicstaticToperator+(Tt1,Tt2)publicstaticimplicitoperatorS(Tt1)操作符重載程序開發(fā)例如操作符重載this:當前對象引用區(qū)分內部字段和外部參數this關鍵字publicclassStudent{privatestringname;publicStudent(stringname){=name;}}this:當前對象引用區(qū)分內部字段和外部參數傳遞當前對象this關鍵字publicclassStudent{privatestringname;publicStudentGetMe(){returnthis;}}Math:提供根本數學函數功能幾個常用類Math靜態(tài)字段PI:圓周率E:自然對數的底Math靜態(tài)字段PI:圓周率E:自然對數的底靜態(tài)方法整數運算:Abs,Ceiling,Floor,Round……初等函數:Exp,Pow,Log,Log10,Sqrt……三角函數:Sin,Cos,Tan,Asin,Acos,Sinh,Cosh……程序開發(fā)例如Math:提供根本數學函數功能幾個常用類Math:提供根本數學函數功能StringBuilder:提供對字符串的高效操作幾個常用類StringBuilder構造函數性能優(yōu)化strings1="";for(inti=0;i<100;i++)s1+=i.ToString()StringBuilders1=newStringBuilder();for(inti=0;i<100;i++)s1.Append(i);低性能高性能字符串操作程序開發(fā)例如Math:提供根本數學函數功能StringBuilder:提供對字符串的高效操作DateTime:封裝對日期/時間的操作幾個常用類DateTime日期/時間你會如何設計這個類型?DateTime字段Year,Month,Day,Hour,Minute,Second,MillisecondDateTime字段Year,Month,Day,Hour,Minute,Second,Millisecond靜態(tài)字段Now,TodayDateTime字段Year,Month,Day,Hour,Minute,Second,Millisecond靜態(tài)字段Now,Today方法更新時間:AddYears,AddDays,AddHours,AddSeconds……字符串解析:Parse,TryParse字符串表示:ToString,ToLongDateString,ToShortTimeString……Math:提供根本數學函數功能StringBuilder:提供對字符串的高效操作DateTime:封裝對日期/時間的操作集合類型:鏈表、隊列、堆棧幾個常用類集合類型ArrayList:提供維護動態(tài)集合的鏈表結構你會如何設計這個類型?集合類型ArrayList:鏈表Add:表尾參加成員ArrayListlist1=newArrayList();list1.Add("趙麗");list1.Add("王強");趙麗Head王強集合類型ArrayList:鏈表Add:表尾參加成員Insert:插入成員ArrayListlist1=newArrayList();list1.Add("趙麗");list1.Add("王強");list1.Insert(1,"Tom");趙麗Head王強Tom集合類型ArrayList:鏈表Add:表尾參加成員Insert:插入成員ArrayListlist1=newArrayList();list1.Add("趙麗");list1.Add("王強");list1.Insert(1,"Tom");趙麗Head王強Tom集合類型ArrayList:鏈表Add:表尾參加成員Insert:插入成員Remove:刪除指定成員ArrayListlist1=newArrayList();list1.Add("趙麗");list1.Add("王強");list1.Insert(1,"Tom");list1.Remove("王強");集合類型ArrayList:鏈表Add:表尾參加成員Insert:插入成員Remove:刪除指定成員RemoveAt:刪除指定位置ArrayListlist1=newArrayList();list1.Add("趙麗");list1.Add("王強");list1.Insert(1,"Tom");list1.Remove("王強");list1.RemoveAt(1);集合類型ArrayList:鏈表Add:表尾參加成員Insert:插入成員Remove:刪除指定成員RemoveAt:刪除指定位置Contains:包含某元素?ArrayListlist1=newArrayList();list1.Add("趙麗");list1.Add("王強");list1.Insert(1,"Tom");list1.Remove("王強");list1.RemoveAt(1);boolb1=list1.Contains("王強");集合類型ArrayList:鏈表Add:表尾參加成員Insert:插入成員Remove:刪除指定成員RemoveAt:刪除指定位置Contains:包含某元素?IndexOf:查找元素位置ArrayListlist1=newArrayList();list1.Add("趙麗");list1.Add("王強");list1.Insert(1,"Tom");list1.Remove("王強");list1.RemoveAt(1);boolb1=list1.Contains("王強");inti=list1.IndexOf("王強");集合類型ArrayList:鏈表Add:表尾參加成員Insert:插入成員Remove:刪除指定成員RemoveAt:刪除指定位置Contains:包含某元素?IndexOf:查找元素位置Count:元素個數ArrayListlist1=newArrayList();list1.Add("趙麗");list1.Add("王強");list1.Insert(1,"Tom");list1.Remove("王強");list1.RemoveAt(1);boolb1=list1.Contains("王強");inti=list1.IndexOf("王強");intn=list1.Count;集合類型Queue:隊列先進先出集合類型Queue:隊列Enqueue:隊尾參加成員Queueq1=newQueue();q1.Enqueue(newDateTime(2012,1,6));q1.Enqueue("小寒");q1.Enqueue(13);集合類型Queue:隊列Enqueue:隊尾參加成員Dequeue:隊首取出成員Queueq1=newQueue();q1.Enqueue(newDateTime(2012,1,6));q1.Enqueue("小寒");q1.Enqueue(13);Console.Write(q1.Dequeue());集合類型Queue:隊列Enqueue:隊尾參加成員Dequeue:隊首取出成員Peek:訪問隊首元素Queueq1=newQueue();q1.Enqueue(newDateTime(2012,1,6));q1.Enqueue("小寒");q1.Enqueue(13);Console.Write(q1.Dequeue());Console.WriteLine(q1.Peek());集合類型Stack:堆棧先進后出集合類型Stack:堆棧Push:棧頂參加成員Stacks1=newStack();for(inti=0;i<10;i++)s1.Push(1);集合類型Stack:堆棧Push:棧頂參加成員Pop:棧頂取出成員Stacks1=newStack();for(inti=0;i<10;i++)s1.Push(1);Console.Write(s1.Pop());集合類型Stack:堆棧Push:棧頂參加成員Pop:棧頂取出成員Peek:訪問棧頂元素Stacks1=newStack();for(inti=0;i<10;i++)s1.Push(1);Console.Write(s1.Pop());Console.WriteLine(s1.Peek());集合管理程序開發(fā)例如Math:提供根本數學函數功能StringBuilder:提供對字符串的高效操作DateTime:封裝對日期/時間的操作集合類型:鏈表、隊列、堆棧Type:管理“類型”的高級類型幾個常用類Type“類型元信息”intx=5;doubley=1.2;intz=(int)y;Typet1=x.GetType();Typet2=y.GetType();整數類型元信息實數類型元信息Type“類型元信息”intx=5;doubley=1.2;intz=(int)y;Typet1=x.GetType();Typet2=y.GetType();bool

b1=(t1==t2);//falseType“類型元信息”intx=5;doubley=1.2;intz=(int)y;Typet1=x.GetType();Typet2=y.GetType();bool

b1=(t1==t2);//falseb1=(t1==t3.GetType());//trueb1=(t2==typeof(double));//trueType類型反射種類判斷:IsClass,IsInterface,IsValueType,IsEnum……intx=5;Typet1=x.GetType();Console.Write(t1.IsClass);//falseConsole.Write(t1.IsValueType);//trueType類型反射種類判斷:IsClass,IsInterface,IsValueType,IsEnum……intx=5;Typet1=x.GetType();Console.Write(t1.IsClass);//falseConsole.Write(t1.IsValueType);//trueTypet2=typeof(string);Console.Write(t2.IsClass);//trueType類型反射種類判斷:IsClass,IsInterface,IsValueType,IsEnum……成員信息:GetMembers,GetFields,GetProperties,GetMethods……boolHasMaxValue(Typet){foreach(PropertyInfopint.GetProperties())if(p.Name==“MaxValue”);returntrue;returnfalse;}Type類型反射種類判斷:IsClass,IsInterface,IsValueType,IsEnum……成員信息:GetMembers,GetFields,GetProperties,GetMethods……boolCanCompare(Typet){foreach(MethodInfomint.GetMethods())if(m.Name==“Compare”);returntrue;returnfalse;}類型反射程序開發(fā)例如第6章課后練習編程實現復數類ComplexNumber,重載相關操作符編程求解一元二次方程ax2+bx+c=0使用StringBuilder來刪除一個字符串中的所有空格。第7章繼承和多態(tài)性鄭宇軍《C#語言程序設計(第3版)》清華大學出版社第7章繼承和多態(tài)性面向對象的方法學構造函數和析構函數屬性索引函數事件操作符重載

this關鍵字

幾個常用類繼承圖形矩形三角形橢圓形平行四邊形多邊形四邊形圓形菱形基類和派生類繼承基類和派生類publicclassShape{privatePoints[]points;publicdoubleGetArea(){return0;}}publicclassTriangle:Shape{}publicclassQuadrangle:Shape{}publicclassRectangle:Quadrangle{}繼承基類和派生類繼承基類的公有/保護成員publicclassShape{privatePoints[]points;publicdoubleGetArea(){return0;}}publicclassTriangle:Shape{}publicclassQuadrangle:Shape{}publicclassRectangle:Quadrangle{}繼承基類和派生類繼承基類的公有/保護成員增加新的成員publicclassShape{privatePoints[]points;publicdoubleGetArea(){return0;}}publicclassTriangle:Shape{publicdouble[]angles;}繼承基類和派生類繼承基類的公有/保護成員增加新的成員publicclassShape{privatePoints[]points;publicdoubleGetArea(){return0;}}publicclassQuadrangle:Shape{}publicclassRectangle:Quadrangle{publicdoublewidth;publicdoubleheight;}繼承基類和派生類繼承基類的公有/保護成員增加新的成員隱藏基類成員publicclassShape{privatePoints[]points;publicdoubleGetArea(){return0;}}publicclassQuadrangle:Shape{}publicclassRectangle:Quadrangle{publicdoublewidth;publicdoubleheight;publicnewdoubleGetArea(){return2*(width+height);}}繼承對象生命周期Shape::ConstructorQuadrangle::ConstructorRectangle::ConstructorShape::DestructorQuadrangle::DestructorRectangle::DestructorRectangler1=newRectangle();r1.Dispose();多態(tài)性虛擬和重載new:覆蓋基類成員publicclassShape{privatePoints[]points;publicdoubleGetArea(){return0;}}publicclassQuadrangle:Shape{}publicclassRectangle:Quadrangle{publicdoublewidth;publicdoubleheight;publicnewGetArea(){return2*(width+height);}}多態(tài)性虛擬和重載new:覆蓋基類成員virtual/override:重載基類成員publicclassShape{privatePoints[]points;publicvirtualdoubleGetArea(){return0;}}publicclassQuadrangle:Shape{}publicclassRectangle:Quadrangle{publicdoublewidth;publicdoubleheight;publicoverridedoubleGetArea(){return2*(width+height);}}多態(tài)性虛擬和重載new:覆蓋基類成員virtual/override:重載基類成員publicclassShape{privatePoints[]points;publicvirtualdoubleGetArea(){return0;}}publicclassQuadrangle:Shape{}publicclassRectangle:Quadrangle{publicdoublewidth;publicdoubleheight;publicoverridedoubleGetArea(){return2*(width+height);}}Shapes1=newShape();doublex=s1.GetArea();Quadrangleq1=newQuadrangle();x=q1.GetArea();Rectangler1=newRectangle();x=r1.GetArea();多態(tài)性虛擬和重載new:覆蓋基類成員virtual/override:重載基類成員publicclassShape{privatePoints[]points;publicvirtualdoubleGetArea(){return0;}}publicclassQuadrangle:Shape{}publicclassRectangle:Quadrangle{publicdoublewidth;publicdoubleheight;publicoverrideintGetArea(){return2*(width+height);}}虛擬和重載方法的簽名須一致!多態(tài)性虛擬和重載new:編譯時的多態(tài)性override:運行時的多態(tài)性publicclassShape{privatePoints[]points;publicvirtualdoubleGetArea(){return0;}}publicclassQuadrangle:Shape{}publicclassRectangle:Quadrangle{publicdoublewidth;publicdoubleheight;publicoverridedoubleGetArea(){return2*(width+height);}}Shapes1=newShape();doublex=s1.GetArea();Quadrangleq1=newQuadrangle();x=q1.GetArea();Rectangler1=newRectangle();x=r1.GetArea();多態(tài)性抽象類和抽象方法抽象類:不能創(chuàng)立實例publicabstractclassShape{privatePoints[]points;publicabstractdoubleGetArea(){return0;}}publicclassQuadrangle:Shape{}publicclassRectangle:Quadrangle{publicdoublewidth;publicdoubleheight;publicoverridedoubleGetArea(){return2*(width+height);}}Shapes1=newShape();doublex=s1.GetArea();Quadrangleq1=newQuadrangle();x=q1.GetArea();Rectangler1=newRectangle();x=r1.GetArea();多態(tài)性抽象類和抽象方法抽象類:不能創(chuàng)立實例抽象方法:不能有實現代碼!publicabstractclassShape{privatePoints[]points;publicabstractdoubleGetArea(){return0;}}publicclassQuadrangle:Shape{}publicclassRectangle:Quadrangle{publicdoublewidth;publicdoubleheight;publicoverridedoubleGetArea(){return2*(width+height);}}Quadrangleq1=newQuadrangle();x=q1.GetArea();Rectangler1=newRectangle();x=r1.GetArea();多態(tài)性抽象類和抽象方法抽象類:不能創(chuàng)立實例抽象方法:必須在非派生類中override!publicabstractclassShape{privatePoints[]points;publicabstractdoubleGetArea();}publicclassQuadrangle:Shape{}publicclassRectangle:Quadrangle{publicdoublewidth;publicdoubleheight;publicoverridedoubleGetArea(){return2*(width+height);}}Quadrangleq1=newQuadrangle();x=q1.GetArea();Rectangler1=newRectangle();x=r1.GetArea();多態(tài)性抽象類和抽象方法抽象類:不能創(chuàng)立實例抽象方法:必須在非派生類中override!publicabstractclassShape{privatePoints[]points;publicabstractdoubleGetArea();}publicclassQuadrangle:Shape{publicoverridedoubleGetArea(){return0;}}publicclassRectangle:Quadrangle{publicdoublewidth;publicdoubleheight;publicoverridedoubleGetArea(){return2*(width+height);}}Quadrangleq1=newQuadrangle();x=q1.GetArea();Rectangler1=newRectangle();x=r1.GetArea();也是virtual方法publicsealedclassQuadrangle:Shape{publicoverridedoubleGetArea(){return0;}}publicclassRectangle:Quadrangle{publicdoublewidth;publicdoubleheight;publicoverridedoubleGetArea(){return2*(width+height);}}多態(tài)性抽象類和抽象方法abstract類:要求繼承sealed類:不能被繼承publicabstractclassShape{privatePoints[]points;publicabstractdoubleGetArea();}publicclassQuadrangle:Shape{publicsealeddoubleGetArea(){return0;}}publicclassRectangle:Quadrangle{publicdoublewidth;publicdoubleheight;publicoverridedoubleGetArea(){return2*(width+height);}}多態(tài)性抽象類和抽象方法abstract方法:要求重載sealed方法:不能被重載publicabstractclassShape{privatePoints[]points;publicabstractdoubleGetArea();}多態(tài)性程序開發(fā)例如接口與繼承接口和抽象類publicabstractclassShape{publicabstractdoubleGetArea();}publicinterfaceIShape{doubleGetArea();}publicclassCircle:Shape,IShape{publicdoubleR{get;set;}publicoverridedoubleGetArea(){return3.14*R*R};publicdoubleI

溫馨提示

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

評論

0/150

提交評論