版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、本章學習目的本章學習目的了解類的承繼與多態(tài)的概念了解類的承繼與多態(tài)的概念熟習類型轉換的方法熟習類型轉換的方法掌握構造與接口的定義及用法掌握構造與接口的定義及用法掌握異常處置的方法掌握異常處置的方法掌握委托的定義及用法掌握委托的定義及用法第四章第四章 面向對象編程進階面向對象編程進階4.1 類的承繼與多態(tài)類的承繼與多態(tài)4.3 類型轉換類型轉換4.4 構造與接口構造與接口4.6 異常處置異常處置4.7 委托委托4.1 類的承繼與多態(tài)類的承繼與多態(tài)4.1.1 承繼承繼4.1.2 多態(tài)多態(tài)4.1.1 承繼承繼 類的承繼性:類的承繼性:C#允許基于某一個曾經定義的類來創(chuàng)建一允許基于某一個曾經定義的類來創(chuàng)
2、建一個新類。個新類。 基類:被承繼的類,即父類。基類:被承繼的類,即父類。 派生類:承繼的類,即子類。派生類:承繼的類,即子類。4.1.1 承繼承繼訪問修飾符訪問修飾符 class 類名類名 : 基類基類 類主體類主體 訪問修飾符:訪問修飾符:public:表示不限制對類的訪問;:表示不限制對類的訪問;internal:可被同一個工程的程序訪問;:可被同一個工程的程序訪問;sealed: 表示一個密封類,不能被承繼。表示一個密封類,不能被承繼。 闡明:假設對類不指定訪問修飾符,那么類的默許訪問修飾符為闡明:假設對類不指定訪問修飾符,那么類的默許訪問修飾符為internal 定義派生類定義派生類
3、4.1.1 承繼承繼 class Person public string name; protect string sex; int age; class Student : Person string stuNo; string classNo; 定義派生類定義派生類4.1.1 承繼承繼派生類只能承繼于一個基類;派生類只能承繼于一個基類;派生類自然承繼基類的成員,但不能承繼基類的構造函數成員;派生類自然承繼基類的成員,但不能承繼基類的構造函數成員;類的承繼可以傳送。如類的承繼可以傳送。如C類承繼類承繼B類,類,B類承繼類承繼A類,那么類,那么C類具類具有有B類和類和A類的成員;類的成員;派
4、生類是對基類的擴展,派生類定義中可以聲明新的成員;派生類是對基類的擴展,派生類定義中可以聲明新的成員;派生類定義中假設聲明了與基類同名的成員,那么基類的同名成派生類定義中假設聲明了與基類同名的成員,那么基類的同名成員將被隱藏,從而使派生類不能直接訪問同名的基類的成員;員將被隱藏,從而使派生類不能直接訪問同名的基類的成員;基類可以定義虛方法成員等,這樣派生類可以覆蓋這些成員以表基類可以定義虛方法成員等,這樣派生類可以覆蓋這些成員以表現類的多態(tài)性?,F類的多態(tài)性。類的承繼規(guī)那類的承繼規(guī)那么么4.1.1 承繼承繼派生類構造函數派生類構造函數 默許執(zhí)行基類的無參構造函數,假設要執(zhí)行基類有參構默許執(zhí)行基類
5、的無參構造函數,假設要執(zhí)行基類有參構造函數,那么必需在派生類構造函數的基表列表中指出;造函數,那么必需在派生類構造函數的基表列表中指出; 構造函數調用順序:先基類后派生類。構造函數調用順序:先基類后派生類。 派生類析構函數派生類析構函數 析構函數調用順序:先派生類后基類。析構函數調用順序:先派生類后基類。4.1.1 承繼承繼base 在派生類中調用基類方法在派生類中調用基類方法 在構造函數中顯式調用基類構造函數在構造函數中顯式調用基類構造函數 public 派生類名派生類名(形參列表形參列表): base(基類構造函基類構造函數實參列表數實參列表) 在方法中調用基類方法在方法中調用基類方法 b
6、ase.基類方法名基類方法名(參數表參數表)4.1.1 承繼承繼隱藏隱藏隱藏隱藏自動隱藏與基類同名的成員自動隱藏與基類同名的成員聲明成員時,顯式運用聲明成員時,顯式運用new修飾符修飾符隱藏本質上是使承繼的成員在派生類成為不可見的。隱藏隱藏本質上是使承繼的成員在派生類成為不可見的。隱藏的成員并沒有被刪除,只是不能從派生類直接訪問,經過基類的成員并沒有被刪除,只是不能從派生類直接訪問,經過基類可以直接訪問它??梢灾苯釉L問它。4.1.2 多態(tài)多態(tài) 編譯時實現的多態(tài):編譯時實現的多態(tài): 假設一個類中有兩個或兩個以上的方法的名字一樣,而它假設一個類中有兩個或兩個以上的方法的名字一樣,而它們的形參個數或
7、形參類型有所不同,在程序編譯時可以正們的形參個數或形參類型有所不同,在程序編譯時可以正確區(qū)別他們;確區(qū)別他們; 運轉時實現的多態(tài):運轉時實現的多態(tài): 指在程序運轉時,基類對象執(zhí)行一個基類與派生類都具有指在程序運轉時,基類對象執(zhí)行一個基類與派生類都具有的同名方法調用時,程序可以根據基類對象類型的不同的同名方法調用時,程序可以根據基類對象類型的不同基類還是派生類進展正確的調用?;愡€是派生類進展正確的調用。 實現方法:虛方法、籠統方法實現方法:虛方法、籠統方法4.1.2 多態(tài)多態(tài)虛方法虛方法public virtual 前往類型前往類型 方法名參數列表方法名參數列表 方法體方法體 基類中定義虛方法
8、基類中定義虛方法public override 前往類型前往類型 方法名參數列表方法名參數列表 方法體方法體 派生類中重寫基類中定義虛方法派生類中重寫基類中定義虛方法4.1.2 多態(tài)多態(tài)虛方法虛方法幾點闡明:幾點闡明:基類與派生類中的方法名、參數列表、前往類基類與派生類中的方法名、參數列表、前往類型必需完全一致;型必需完全一致;可被重寫的基類方法是虛方法、籠統方法或重可被重寫的基類方法是虛方法、籠統方法或重寫方法寫方法override修飾修飾virtual不能與不能與static、abstract或或override中任中任一個同時出現;一個同時出現;override不能與不能與new、sta
9、tic、virtual或或abstract中任一個同時運用;中任一個同時運用;4.1.2 隱藏與多態(tài)實例隱藏與多態(tài)實例隱藏與多態(tài)隱藏與多態(tài)class A public void E() Console.WriteLine(“A.E); public void F() Console.WriteLine(“A.F); public virtual void G() Console.WriteLine(“A.G); class B:A public void E() Console.WriteLine(“B.E); public new void F() Console.WriteLine(“B.
10、F); public override void G() Console.WriteLine(“B.G); class Test public static void Main() B b=new B(); A a=b; a.E(); b.E(); a.F(); b.F(); a.G(); b.G(); 輸出結果:輸出結果:A.EB.EA.FB.FB.GB.G父類可以援用子類對象,父類援用只能調用子類承繼自父類的方法,父類可以援用子類對象,父類援用只能調用子類承繼自父類的方法,父類不能調用子類獨有的方法。父類不能調用子類獨有的方法。4.1.2 隱藏與多態(tài)實例隱藏與多態(tài)實例隱藏與多態(tài)隱藏與多態(tài)c
11、lass A public virtual void F() Console.WriteLine(“A.F); class B:A public override void F() Console.WriteLine(“B.F); class C :B new public virtual void F() Console.WriteLine(“C.F); class D :C public override void F() Console.WriteLine(“D.F); class Test public static void Main() D d=new D(); A a=d; B
12、b=d; C c=d; a.F(); b.F(); c.F(); d.F(); 輸出結果:輸出結果:B.FB.FD.FD.F4.1.2 多態(tài)多態(tài)籠統類與籠統方法籠統類與籠統方法 籠統類:是一種特殊的基類,該類并不與詳細的事物發(fā)生籠統類:是一種特殊的基類,該類并不與詳細的事物發(fā)生聯絡;例如幾何體,計算幾何體體積的方法不能夠有詳細聯絡;例如幾何體,計算幾何體體積的方法不能夠有詳細實現過程,只需詳細某一種幾何體才有求體積的方法;實現過程,只需詳細某一種幾何體才有求體積的方法; 籠統類是指在基類的定義中聲明不包含任何實現代碼的方籠統類是指在基類的定義中聲明不包含任何實現代碼的方法,實踐上就是一個不具有
13、任何詳細功能的方法,即籠統法,實踐上就是一個不具有任何詳細功能的方法,即籠統方法。該方法的獨一作用就是讓派生類來重寫;方法。該方法的獨一作用就是讓派生類來重寫; 在基類定義中,只需類體中包含一個籠統方法,該類即為在基類定義中,只需類體中包含一個籠統方法,該類即為籠統類?;\統類。4.1.2 多態(tài)多態(tài)籠統類與籠統方法籠統類與籠統方法public abstract class 類名類名 public abstract 前往類型前往類型 方法稱號參數列表;方法稱號參數列表; 聲明籠統類與籠統方法聲明籠統類與籠統方法不包含方法體,不包含方法體, 也不能要也不能要4.1.2 多態(tài)多態(tài)籠統類與籠統方法籠統類
14、與籠統方法籠統類幾點闡明籠統類幾點闡明一個類中只需包含一個籠統方法,該類即為籠統類;反之一個類中只需包含一個籠統方法,該類即為籠統類;反之,一個籠統類中必需包含籠統方法;,一個籠統類中必需包含籠統方法;籠統類中可以包含非籠統方法;籠統類中可以包含非籠統方法;籠統類不能實例化,不能用籠統類不能實例化,不能用new生成實例;生成實例;籠統類不能被密封?;\統類不能被密封。派生類闡明派生類闡明假設基類為籠統類,那么要求派生類必需重載實現基類中假設基類為籠統類,那么要求派生類必需重載實現基類中一切籠統方法。一切籠統方法。籠統方法闡明籠統方法闡明籠統方法沒有方法體,只需一個方法頭后跟一個分號;籠統方法沒有
15、方法體,只需一個方法頭后跟一個分號;籠統方法被隱含以為是一種虛方法,派生類中必需重寫一籠統方法被隱含以為是一種虛方法,派生類中必需重寫一切籠統方法,且重寫的方法與籠統方法的參數及類型、方切籠統方法,且重寫的方法與籠統方法的參數及類型、方法名都應一樣。法名都應一樣。4.1.2 多態(tài)多態(tài)籠統類與籠統方法籠統類與籠統方法public abstract class Shape protected double x; protected double y; protected double z; public Shape(double dx, double dy, double dz) x=dx; y=
16、dy; z=dz; public abstract double Cubage();定義籠統類及籠統方法定義籠統類及籠統方法4.1.2 多態(tài)多態(tài)籠統類與籠統方法籠統類與籠統方法public class Cuboid:Shape public Cuboid(double dx, double dy, double dz) :base(dx,dy,dz) public override double Cubage() return x * y * z; 重載籠統方法重載籠統方法4.1.2 多態(tài)多態(tài)籠統類與籠統方法籠統類與籠統方法 虛方法與籠統方法區(qū)別虛方法與籠統方法區(qū)別 籠統方法必需在籠統類中定義
17、,虛方法可以在籠統類或普籠統方法必需在籠統類中定義,虛方法可以在籠統類或普通類中定義;通類中定義; 在基類中,虛方法用在基類中,虛方法用virtual關鍵字,籠統方法用關鍵字,籠統方法用abstract關鍵字;關鍵字; 在派生類中,虛方法不一定重寫,籠統方法一定要重寫;在派生類中,虛方法不一定重寫,籠統方法一定要重寫;修飾符小結修飾符小結基類方法基類方法abstractvirtualoverride無闡明符無闡明符new(無闡明符無闡明符)override派生類方法派生類方法4.1.2 多態(tài)多態(tài)密封類和密封方法密封類和密封方法密封類:不允許被承繼的類。密封類:不允許被承繼的類。定義密封類定義密
18、封類訪問修飾符訪問修飾符 sealed class 類稱號類稱號 類體類體 public sealed class SealedClass public string method( ) return 我是密封類我是密封類; 定義密封類定義密封類4.1.2 多態(tài)多態(tài)密封類和密封方法密封類和密封方法 基類中要密封的方法必需有基類中要密封的方法必需有virtual、abstract或或override 派生類中的密封方法必需同時有派生類中的密封方法必需同時有sealed override。定義密封方法定義密封方法訪問修飾符訪問修飾符 sealed override 前往類型前往類型 方法名參數列表
19、方法名參數列表 方法體方法體 4.1.2 多態(tài)多態(tài)密封類和密封方法密封類和密封方法密封方法密封方法class A public virtual void F() Console.WriteLine(“A.F); class B:A public sealed override void F() Console.WriteLine(“B.F); class C :B public override void F() Console.WriteLine(“C.F); class Test public static void Main() C c=new C(); c.F(); sealed必需與
20、必需與override同時出現同時出現不允許重寫不允許重寫F方法方法假設無假設無override那么為那么為隱藏隱藏4.3 類型轉換類型轉換4.3.1 隱式類型轉換隱式類型轉換4.3.2 顯式類型轉換顯式類型轉換4.3.3 運用運用Convert轉換轉換為什么需求類型轉換為什么需求類型轉換編譯器要確切地知道數據的類型編譯器要確切地知道數據的類型int num = 123 ;整數整數字符串字符串需求類型轉換!需求類型轉換!編譯出錯編譯出錯4.3.1 隱式類型轉換隱式類型轉換隱式轉換:自動類型轉換隱式轉換:自動類型轉換規(guī)那么:對于數值類型,規(guī)那么:對于數值類型,A的取值范圍完全包含在的取值范圍完全
21、包含在B內內ABstatic void Main(string args) double score = 58.5; / 原始成果原始成果 int bonus = 2; / 加分加分 int sum; / 總分總分 sum = score + bonus; / 計算總分計算總分 Console.WriteLine(sum); Console.ReadLine();4.3.2 顯式類型轉換顯式類型轉換static void Main(string args) double score = 58.5; int bonus = 2; int sum; sum = (int)score + bonus
22、; Console.WriteLine(sum); Console.ReadLine();明確通知編譯器轉換類型明確通知編譯器轉換類型留意:留意:double (58.5)-int (58),精度能夠喪失!,精度能夠喪失!顯式轉換:強迫類型轉換顯式轉換:強迫類型轉換運用運用 Parse() 進展轉換進展轉換字符串和數值型的相互轉換字符串和數值型的相互轉換 int.Parse( )float.Parse( )double.Parse( )ToString()必需是數字的必需是數字的有效表示方式!有效表示方式!4.3.3 運用運用 Convert 類進展轉換類進展轉換 運用 Convert :Co
23、nvert.ToXxx(object value)Convert.ToInt32()Convert.ToSingle()Convert.ToString()double85.63string85.63int86float85.63Parse 與與 ConvertXxx.Parse(string)目的類型的有效表示方式目的類型的有效表示方式 Convert.ToXxx(object):注:注:Xxx表示某種類型表示某種類型字符串字符串其他類型其他類型恣意類型恣意類型其他類型其他類型4.4 構造與接口構造與接口訪問修飾符訪問修飾符struct 構造名構造名 構造主體構造主體 訪問修飾符:訪問修飾符
24、:public:表示不限制對構造的訪問;:表示不限制對構造的訪問;internal: 可被同一個工程的程序訪問默許;可被同一個工程的程序訪問默許;構呵斥員包括字段、屬性、方法等;構呵斥員包括字段、屬性、方法等;構造可以定義構造函數,但不能定義析構函數;構造可以定義構造函數,但不能定義析構函數;有一個默許的不帶參數的構造函數,有一個默許的不帶參數的構造函數, 用于對構造的字段進展初始化,并用于對構造的字段進展初始化,并且構造的默許構造函數不能被重寫。且構造的默許構造函數不能被重寫。構造的聲明構造的聲明4.4 構造與接口構造與接口構造與類的區(qū)別構造與類的區(qū)別結結 構構類類值類型值類型引用類型引用類
25、型可以不使用可以不使用new實例化實例化必須使用必須使用new初始化初始化不可以添加無參構造函數不可以添加無參構造函數可以添加無參構造函數可以添加無參構造函數沒有析構函數沒有析構函數有析構函數有析構函數沒有沒有abstract,protected和和sealed修飾符修飾符可以使用可以使用abstract,protected和和sealed修飾符修飾符不支持繼承不支持繼承支持繼承支持繼承適用于表示小的數據結構適用于表示小的數據結構適用于表示任何數據結構適用于表示任何數據結構4.4 構造與接口構造與接口struct account public string name; public doubl
26、e balance; public account(string n,double b) name=n;balance=b; 構造定義及運用一構造定義及運用一4.4 構造與接口構造與接口構造定義及運用構造定義及運用( (一續(xù)一續(xù)class Test public static void Main() account acc1=new account(“張三,張三,3000); /顯式構造函數顯式構造函數 account acc2=new account(); /缺省構造函數缺省構造函數account acc3; /沒有構造函數沒有構造函數Console.WriteLine(+
27、“has a balance of +acc1.balance);if(=null) Console.WriteLine(“ is null); Console.WriteLine(“acc2.balance is +acc2.balance); /運用運用acc3以前,必需初始化以前,必需初始化acc3 =“Mary; acc3.balance=2000; Console.WriteLine(+“has a balance of +acc3.balance); 4.4 構造與接口構造與接口struct MyStruct
28、public int x; public int y; public MyStruct(int i, int j)x = i;y = j; public void Sum() int sum=x+y; Console.WriteLine(“The sum is 0,sum); 構造定義及運用二構造定義及運用二4.4 構造與接口構造與接口class Test static void Main() MyStruct s1 = new MyStruct(1,2); MyStruct s2 = s1; s1.x = 2; s1.Sum(); s2.Sum(); 構造定義及運用二續(xù)構造定義及運用二續(xù)輸出
29、結果:輸出結果:The sum is 4The sum is 3值傳送值傳送4.4 構造與接口構造與接口 接口聲明定義了一個協定,運用接口的類或構造必需遵守接口聲明定義了一個協定,運用接口的類或構造必需遵守其協定。接口可以從多個基接口承繼,而類或構造可以實其協定。接口可以從多個基接口承繼,而類或構造可以實現多個接口;現多個接口; 接口成員只能是方法、屬性、索引和事件,不能有字段。接口成員只能是方法、屬性、索引和事件,不能有字段。 接口本身不提供它所定義成員的實現代碼,只指定實現該接口本身不提供它所定義成員的實現代碼,只指定實現該接口的類或構造必需提供的成員的調用方式。接口的類或構造必需提供的成
30、員的調用方式。4.4 構造與接口構造與接口訪問修飾符訪問修飾符 interface 接口名接口名 :基接口:基接口1,基接口,基接口2. 接口體接口體 訪問修飾符:訪問修飾符:public:表示不限制對類的訪問;:表示不限制對類的訪問;internal: 可被同一個工程的程序訪問默許;可被同一個工程的程序訪問默許;接口成員包括屬性、方法等;接口成員包括屬性、方法等;接口不能包括字段,也不能定義構造函數和析構函數;接口不能包括字段,也不能定義構造函數和析構函數;接口成員訪問修飾符默以為接口成員訪問修飾符默以為public;接口的命名通常是以接口的命名通常是以I開頭,如開頭,如IPartA。接口的
31、聲明接口的聲明4.4 構造與接口構造與接口 接口的實現接口的實現 函數成員的實現:類、構造;函數成員的實現:類、構造; 實現接口類型:實現接口類型: public成員實現成員實現 顯示接口成員實現顯示接口成員實現 不能用不能用new操作符創(chuàng)建接口的實例操作符創(chuàng)建接口的實例4.4 構造與接口構造與接口 public成員實現成員實現 實現接口成員時,聲明成員為實現接口成員時,聲明成員為public,這樣的實,這樣的實現聲明稱為現聲明稱為public接口成員實現聲明,簡稱接口成員實現聲明,簡稱public成員實現或成員實現或public實現實現; public實現的成員具有雙重訪問性,由于它是接實現
32、的成員具有雙重訪問性,由于它是接口成員的實現,所以可以經過接口實例來訪問,口成員的實現,所以可以經過接口實例來訪問,又由于它是又由于它是public成員,還可以經過類或構造的成員,還可以經過類或構造的實例來訪問。實例來訪問。4.4 構造與接口構造與接口interface IA void p();class B:IA public void p() /代碼實現代碼實現 class Test public static void Main() B b=new B(); b.p(); IA a=b; a.p(); public成員實現成員實現(一一)正確正確正確正確4.4 構造與接口構造與接口pub
33、lic成員實現二成員實現二interface IPoint int Xget;set; int Yget;set;class MyPoint:IPoint private int myX,myY; public MyPoint(int x,int y) myX=x;myY=y; public int X /對屬性對屬性X的的public實現聲明實現聲明 getreturn myX; setmyX=value; public int Y /對屬性對屬性Y的的public實現聲明實現聲明 getreturn myY; setmyY=value; 4.4 構造與接口構造與接口class MainCl
34、ass /經過接口調用經過接口調用 public static void PrintPoint(IPoint p) Console.WriteLine(“x=0,y=1,p.X,p.Y); public static void Main() MyPoint p=new MyPoint(2,3); Console.Write(“MyPoint:); PrintPoint(p); public成員實現二續(xù)成員實現二續(xù)輸出結果:輸出結果:MyPoint:x=2,y=34.4 構造與接口構造與接口 顯式接口成員實現顯式接口成員實現 用接口成員的完全限定名接口名用接口成員的完全限定名接口名.成員名來顯成
35、員名來顯式指定要實現的接口成員,這樣的實現聲明稱為式指定要實現的接口成員,這樣的實現聲明稱為顯式接口成員實現聲明,簡稱顯式實現聲明顯式接口成員實現聲明,簡稱顯式實現聲明; 留意:顯式實現聲明中不能用留意:顯式實現聲明中不能用public修飾符。修飾符。4.4 構造與接口構造與接口interface IA void p();class B:IA void IA.p() /代碼實現代碼實現 class Test public static void Main() B b=new B(); b.p(); IA a=b; a.p(); 顯式成員實現顯式成員實現(一一)錯誤錯誤正確正確4.4 構造與接口
36、構造與接口interface IA void p(); interface IB void p(); class C:IA,IB void IA.p()Console.WriteLine(“A.p); void IB.p()Console.WriteLine(“B.p); public void p() Console.WriteLine(“C.p); class Test public static void Main() C c=new C(); c.p(); (IA)c).p(); (IB)c).p(); 顯式成員實現顯式成員實現(二二)輸出結果:輸出結果:C.pA.pB.p4.4 構造
37、與接口構造與接口interface IA void p(); class B:IA void IA.p()Console.WriteLine(“A.p); public void p() Console.WriteLine(“B.p); class C:B,IA public static void Main() B b=new B(); IA a=b; a.p(); /顯式接口成員實現優(yōu)顯式接口成員實現優(yōu)先先 C c=new C(); a=c; c.p(); a.p(); 顯式成員實現顯式成員實現(三三)輸出結果:輸出結果:A.pB.pA.p類可以同時有一個基類和零個以類可以同時有一個基類和
38、零個以上的接口,并將基類寫在前面上的接口,并將基類寫在前面4.6 異常處置異常處置 異常異常 指由于程序運轉時發(fā)生的錯誤,從而導致程序錯指由于程序運轉時發(fā)生的錯誤,從而導致程序錯誤終了。誤終了。 異常處置異常處置 當程序運轉過程中發(fā)生了某個異常景象,系統當程序運轉過程中發(fā)生了某個異常景象,系統將產生一個相應的異常類對象,并把它交給系統將產生一個相應的異常類對象,并把它交給系統處置,系統擔任找四處置錯誤的代碼并執(zhí)行,處置,系統擔任找四處置錯誤的代碼并執(zhí)行, 如如除數為除數為0。4.6 異常處置異常處置 運用語句或表達式在執(zhí)行過程中自動引發(fā)了某個異常的條運用語句或表達式在執(zhí)行過程中自動引發(fā)了某個異
39、常的條件件,使得操作無法正常終了使得操作無法正常終了,從而引發(fā)異常;從而引發(fā)異常; 運用顯式運用顯式 throw 語句來引發(fā)異常。在此情況下,控制權語句來引發(fā)異常。在此情況下,控制權將無條件轉四處置異常的部分代碼。將無條件轉四處置異常的部分代碼。引發(fā)異常兩種方式引發(fā)異常兩種方式C#中異常處置語句中異常處置語句 trycatch trycatchfinally tryfinally throw4.6 異常處置異常處置try 被監(jiān)控的能夠發(fā)生異常的程序代被監(jiān)控的能夠發(fā)生異常的程序代碼碼catch(異常類名異常類名 異常變量名異常變量名) 異常處置異常處置格式格式1 1try 被監(jiān)控的能夠發(fā)生異常的
40、程序代被監(jiān)控的能夠發(fā)生異常的程序代碼碼finally 最終要執(zhí)行的代碼最終要執(zhí)行的代碼格式格式2 2try 被監(jiān)控的能夠發(fā)生異常的程序代被監(jiān)控的能夠發(fā)生異常的程序代碼碼catch(異常類名異常類名 異常變量名異常變量名) 異常處置異常處置finally 最終要執(zhí)行的代碼最終要執(zhí)行的代碼格式格式3 34.6 異常處置異常處置 try子句包含能夠引起異常的代碼;子句包含能夠引起異常的代碼; 只需發(fā)生異常時才執(zhí)行只需發(fā)生異常時才執(zhí)行catch子句,假設沒有異常,子句,假設沒有異常,try子句子句正常終了,正常終了,catch子句被忽略,程序轉到子句被忽略,程序轉到catch后的第一條語后的第一條語句
41、開場執(zhí)行;句開場執(zhí)行; 可以包含多個可以包含多個catch語句;語句; catch子句可以不包括參數,它將捕獲一切類型的異常;子句可以不包括參數,它將捕獲一切類型的異常; 異常類名必需為異常類名必需為System.Exception或從或從System.Exception派生的類型;派生的類型; finally子句不論有沒有異常都執(zhí)行。子句不論有沒有異常都執(zhí)行。4.6 異常處置異常處置異常類名稱異常類名稱說明說明ArithmeticException錯誤:由于數學運算導致的異常FormatException參數的格式不正確ArgumentNullException參數為空:給方法傳遞一個不可接
42、受的空參數MemberAccessException訪問錯誤:類型成員不能被訪問數學計算ArrayTypeMismatchException數組類型不匹配DivideByZeroException被零除ArgumentException參數錯誤:方法的參數無效IndexOutOfRangeException索引超出范圍InvalidCastException非法強制轉換,在顯式轉換失敗時引發(fā)MulticastNotSupportedException不支持的組播:組合兩個非空委派時引發(fā)NotSupportedException調用的方法在類中沒有實現NullReferenceException
43、引用空引用對象時引發(fā)OutOfMemoryException無法為新語句分配內存時引發(fā),內存不足OverflowException溢出StackOverflowException棧溢出NotFiniteNumberException無限大的值:數字不合法4.6 異常處置異常處置int num1, num2,result;try num1 = int.Parse(Console.ReadLine(); num2 = int.Parse(Console.ReadLine(); result = num1 / num2; Console.WriteLine(“商是商是+result);catch(D
44、ivideByZeroException error) Console.WriteLine(除數不能為零!除數不能為零!); catch (FormatException error) Console.WriteLine(輸入格式錯誤!輸入格式錯誤!); catch(Exception ex) /假設寫,寫在假設寫,寫在catch的最后的最后 Console.WriteLine(“輸入錯誤輸入錯誤);finally Console.WriteLine(謝謝運用!謝謝運用!);異常處置異常處置4.6 異常處置異常處置throw異常處置異常處置static int Divide(int x,int
45、 y) try int z=x/y; return z; catch(DivideByZeroException error) throw new DivideByZeroException(“除除數不能為數不能為0); static void Main() int num1, num2,result; try num1 = int.Parse(Console.ReadLine(); num2 = int.Parse(Console.ReadLine(); result = Divide(num1,num2); Console.WriteLine(“商是商是+result);catch(Div
46、ideByZeroException error) Console.WriteLine(error.Message);catch (FormatException error) Console.WriteLine(輸入格式錯誤!輸入格式錯誤!);catch(Exception ex) Console.WriteLine(“輸入錯誤輸入錯誤);finally Console.WriteLine(謝謝運用!謝謝運用!); 4.7 委托委托 委托也叫代理,就是把事情交給他人去辦,如委托律師代理委托也叫代理,就是把事情交給他人去辦,如委托律師代理打官司,委托同窗代買火車票;打官司,委托同窗代買火車票;
47、 C#中假設將一個方法委托給一個代理對象,那么這個對象就中假設將一個方法委托給一個代理對象,那么這個對象就可以全權代理這個方法的執(zhí)行;可以全權代理這個方法的執(zhí)行; 運用委托首先要定義委托,聲明委托能代理什么類型的方法運用委托首先要定義委托,聲明委托能代理什么類型的方法,就像房產中介能代理抵押貸款業(yè)務,而不能代理打官司;,就像房產中介能代理抵押貸款業(yè)務,而不能代理打官司; 委托是一種類型委托是一種類型,即它與即它與class , interface , struct ,enum處處于同一級別于同一級別,而且它是援用類型;而且它是援用類型; 任何委托類型都是任何委托類型都是system.deleg
48、ate類的派生類。類的派生類。4.7 委托委托 何時運用委托?何時運用委托? 1回調函數;回調函數; 2多線程編程中運用委托來指定啟動一個線程時調用的多線程編程中運用委托來指定啟動一個線程時調用的方法;方法; 3C#中的事件模型。用它們指明處置給定事件的方法中的事件模型。用它們指明處置給定事件的方法。4.7 委托委托 委托用法步驟:委托用法步驟: 1定義委托定義委托 訪問修飾符訪問修飾符 delegate 代理方法的前往值類型代理方法的前往值類型 委托類型名委托類型名代理方法參數列表代理方法參數列表 2聲明委托變量聲明委托變量 委托類型名委托類型名 委托對象;委托對象; 3實例化委托變量實例化
49、委托變量 委托對象委托對象=new 委托類型對象名委托類型對象名.方法名方法名/調用某類的實例調用某類的實例方法方法 委托對象委托對象=new 委托類型類名委托類型類名.方法名方法名/調用某類的靜態(tài)方調用某類的靜態(tài)方法法 4調用委托,實現方法調用委托,實現方法 委托對象實參委托對象實參實例化時必需指定實例化時必需指定方法名方法名4.7 委托委托Void Multiply(int,int).Void Divide(int,int).可以援用任何方法,將在運轉時決議委托和方法必需具有一樣的簽名-public delegate void Call(int num1, int num2);-4.7 委托委托定義委托定義委托namespace Delegates public delegate int Call(int num1, int num2); class Math public int Multiply(int num1, int num2) return num1*num2; public int Divide(int num1, int num2) return num1/num2; class TestDelegates publi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 現代環(huán)保材料在建筑領域的應用前景
- 現代交通工具設計中傳統文化的融入方式
- 基坑安全專項方案
- 現代東方風洗浴中心的節(jié)能環(huán)保裝修方案
- 2024年春九年級化學下冊 第9單元 溶液 實驗活動5 一定溶質質量分數的氯化鈉溶液的配制說課稿 (新版)新人教版
- 2023三年級英語下冊 Unit 1 Animals on the farm Lesson 3 Fish and Birds說課稿 冀教版(三起)
- 2023二年級數學上冊 一 加與減第1課時 誰的得分高配套說課稿 北師大版
- 2025蓄電池產品及零部件檢驗合同書
- 《5 奇形怪狀的熱帶魚(圖形工具)》說課稿-2023-2024學年清華版(2012)信息技術一年級上冊
- 2024秋五年級英語上冊 Module 2 Unit 1 What did you buy說課稿 外研版(三起)
- 月球基地建設與運行管理模式
- 32軟件測試報告GJB438C模板
- 長期處方管理規(guī)范
- 汽車電氣設備檢測與維修中職全套教學課件
- 幼兒園大班數學PPT課件2、3、4的分解與組成
- 遙感圖像的分析解譯(共34張PPT)
- API682機械密封沖洗方案(中文)課件
- 七年級上冊英語完形填空、閱讀理解綜合訓練100題(含參考答案)
- DB35T 1345-2013蘭壽系列金魚養(yǎng)殖技術規(guī)范
- 祛痘產品原料配方與消費者祛痘方案選擇建議
- 年產一萬噸蓖麻項目可行性論證報告
評論
0/150
提交評論