第3章 類和結構_第1頁
第3章 類和結構_第2頁
第3章 類和結構_第3頁
第3章 類和結構_第4頁
第3章 類和結構_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、教育部普通高等教育十二五國家級規(guī)劃教材教育部普通高等教育十二五國家級規(guī)劃教材C#程序設計及應用教程程序設計及應用教程第第3版版(包括簡化版:(包括簡化版:C#程序設計教程程序設計教程第第3版)版)第第3章章 類和結構類和結構2Ch3 類和結構類和結構3.1 自定義類自定義類(class)和結構和結構(struct)3.2 屬性和方法屬性和方法3.3 類的繼承與多態(tài)性類的繼承與多態(tài)性3.4 常用結構和類的用法常用結構和類的用法3.1 自定義類自定義類(class)和結構和結構(struct)l3.1.1 類的定義和成員組織類的定義和成員組織l3.1.2 訪問修飾符訪問修飾符l3.1.3 靜態(tài)成員

2、和實例成員靜態(tài)成員和實例成員l3.1.4 構造函數和析構函數構造函數和析構函數l3.1.5 字段和局部變量字段和局部變量l3.1.6 結構的定義和成員組織結構的定義和成員組織343.1.1 類的定義和成員組織類的定義和成員組織類類:定義對象具有的特征(字段、屬性等)和可執(zhí)行的操作(方定義對象具有的特征(字段、屬性等)和可執(zhí)行的操作(方法、事件等)。法、事件等)。 自定義類的常用形式自定義類的常用形式: 訪問修飾符訪問修飾符 static class 類名類名 : 基類基類 ,接口序列,接口序列 類成員類成員 類成員類成員:包括字段、屬性、構造函數、方法、事件、運算符、索包括字段、屬性、構造函數

3、、方法、事件、運算符、索引器、析構函數等。引器、析構函數等。53.1.2 訪問修飾符訪問修飾符類和類的成員都可以使用下面的訪問修飾符。類和類的成員都可以使用下面的訪問修飾符。lpublic:類的內部和外部代碼都可以訪問。:類的內部和外部代碼都可以訪問。lprivate:類的內部可訪問,類的外部無法訪問。如果省略類成員的:類的內部可訪問,類的外部無法訪問。如果省略類成員的訪問修飾符,默認為訪問修飾符,默認為private。linternal:同一個程序集中的代碼都可以訪問,程序集外的其他代碼:同一個程序集中的代碼都可以訪問,程序集外的其他代碼無法訪問。如果省略類的訪問修飾符,默認為無法訪問。如果

4、省略類的訪問修飾符,默認為internal。lprotected:類的內部或者從該類繼承的子類可以訪問。:類的內部或者從該類繼承的子類可以訪問。lprotected internal:從該類繼承的子類或者從另一個程序集中繼承:從該類繼承的子類或者從另一個程序集中繼承的類都可以訪問。的類都可以訪問。6partial修飾符修飾符:包含包含partial修飾符的類稱為分部類。修飾符的類稱為分部類。l可將類的定義分布在多個文件中,編譯器編譯帶有可將類的定義分布在多個文件中,編譯器編譯帶有partial修飾符的修飾符的類時,會自動將這些文件合并在一起。類時,會自動將這些文件合并在一起。l可可隔離自動生成

5、的代碼和人工書寫的代碼隔離自動生成的代碼和人工書寫的代碼?!纠?-1】 演示如何聲明類、字段、構造函數和方法,同時說明如何實例化演示如何聲明類、字段、構造函數和方法,同時說明如何實例化對象、如何使用分部類以及如何輸出實例數據。對象、如何使用分部類以及如何輸出實例數據。3.1.2 訪問修飾符訪問修飾符73.1.3 靜態(tài)成員和實例成員靜態(tài)成員和實例成員通過類名調用靜態(tài)成員,通過類名調用靜態(tài)成員,通過通過實例名調用實例成員。實例名調用實例成員。1. static關鍵字關鍵字l表示類或成員加載到內存中只有一份,而不是有多個實例。當垃圾回收器表示類或成員加載到內存中只有一份,而不是有多個實例。當垃圾回

6、收器檢測到不再使用該靜態(tài)成員時,會自動釋放其占用的內存。檢測到不再使用該靜態(tài)成員時,會自動釋放其占用的內存。l可用于類、字段、方法、屬性、運算符、事件和構造函數,但不能用于索可用于類、字段、方法、屬性、運算符、事件和構造函數,但不能用于索引器、析構函數或者類以外的類型。引器、析構函數或者類以外的類型。l靜態(tài)字段有兩個常見的用法:一是記錄已實例化對象的個數,二是存儲必靜態(tài)字段有兩個常見的用法:一是記錄已實例化對象的個數,二是存儲必須在所有實例之間共享的值。須在所有實例之間共享的值。l靜態(tài)方法可以被重載但不能被重寫,因為它們屬于類,而不屬于類的任何靜態(tài)方法可以被重載但不能被重寫,因為它們屬于類,而

7、不屬于類的任何實例。實例。83.1.3 靜態(tài)成員和實例成員靜態(tài)成員和實例成員2. 靜態(tài)類靜態(tài)類聲明自定義類時如果加上聲明自定義類時如果加上static關鍵字,則該類就是靜態(tài)類。關鍵字,則該類就是靜態(tài)類。靜態(tài)類的主要特點:靜態(tài)類的主要特點:l僅包含靜態(tài)成員。僅包含靜態(tài)成員。l無法實例化。這與在非靜態(tài)類中定義私有構造函數可阻止類被實例無法實例化。這與在非靜態(tài)類中定義私有構造函數可阻止類被實例化的機制相似?;臋C制相似。l是密封的,因此不能被繼承。是密封的,因此不能被繼承。l不能包含實例構造函數,但可以包含靜態(tài)構造函數。如果非靜態(tài)類不能包含實例構造函數,但可以包含靜態(tài)構造函數。如果非靜態(tài)類包含需要進

8、行重要的初始化的靜態(tài)成員,也應定義靜態(tài)構造函數。包含需要進行重要的初始化的靜態(tài)成員,也應定義靜態(tài)構造函數。93.1.4 構造函數和析構函數構造函數和析構函數l構造函數構造函數:是創(chuàng)建對象時自動調用的函數。一般在構造函數中做一是創(chuàng)建對象時自動調用的函數。一般在構造函數中做一些初始化工作,或者做一些僅需執(zhí)行一次的特定操作。些初始化工作,或者做一些僅需執(zhí)行一次的特定操作。l構造函數沒有返回類型,并且它的名稱與其所屬的類的名稱相同。構造函數沒有返回類型,并且它的名稱與其所屬的類的名稱相同。lC#支持兩種構造函數:實例構造函數和靜態(tài)構造函數。支持兩種構造函數:實例構造函數和靜態(tài)構造函數。1. 實例構造函

9、數實例構造函數每創(chuàng)建一個對象,都會先通過每創(chuàng)建一個對象,都會先通過new關鍵字指明調用的構造函數,這種關鍵字指明調用的構造函數,這種構造函數稱為實例構造函數。例如:構造函數稱為實例構造函數。例如: Child child = new Child();這條語句的這條語句的Child()就是被調用的實例構造函數。就是被調用的實例構造函數。103.1.4 構造函數和析構函數構造函數和析構函數2. 靜態(tài)靜態(tài)構造函數構造函數如果構造函數聲明包含如果構造函數聲明包含static修飾符,則為靜態(tài)構造函數,否則為實例構造函修飾符,則為靜態(tài)構造函數,否則為實例構造函數。數。創(chuàng)建第一個實例或引用任何靜態(tài)成員之前,

10、創(chuàng)建第一個實例或引用任何靜態(tài)成員之前,CLR會自動調用靜態(tài)構造函數。會自動調用靜態(tài)構造函數。例如:例如:class SimpleClass static readonly long baseline; static SimpleClass() baseline = DateTime.Now.Ticks; 113.1.4 構造函數和析構函數構造函數和析構函數靜態(tài)構造函數靜態(tài)構造函數的的特點:特點:l靜態(tài)構造函數既沒有訪問修飾符,也沒有參數。靜態(tài)構造函數既沒有訪問修飾符,也沒有參數。l在創(chuàng)建第一個實例或引用任何靜態(tài)成員之前,在創(chuàng)建第一個實例或引用任何靜態(tài)成員之前,CLR會自動調用靜態(tài)會自動調用靜態(tài)

11、構造函數來初始化類。換言之,靜態(tài)構造函數是在實例構造函數之構造函數來初始化類。換言之,靜態(tài)構造函數是在實例構造函數之前執(zhí)行的。前執(zhí)行的。l程序員無法直接調用靜態(tài)構造函數,也無法控制何時執(zhí)行靜態(tài)構造程序員無法直接調用靜態(tài)構造函數,也無法控制何時執(zhí)行靜態(tài)構造函數函數l靜態(tài)構造函數僅調用一次。如果靜態(tài)構造函數引發(fā)異常,在程序運靜態(tài)構造函數僅調用一次。如果靜態(tài)構造函數引發(fā)異常,在程序運行所在的應用程序域的生存期內,類型將一直保持未行所在的應用程序域的生存期內,類型將一直保持未初始初始化的狀態(tài)?;臓顟B(tài)。123.1.3 構造函數和析構函數構造函數和析構函數3. 默認構造函數和私有構造函數默認構造函數和私

12、有構造函數l每個類要求必須至少有一個構造函數。如果代碼中沒有聲明構造函每個類要求必須至少有一個構造函數。如果代碼中沒有聲明構造函數,則系統會自動為該類提供一個不帶參數的空的構造函數,這種數,則系統會自動為該類提供一個不帶參數的空的構造函數,這種自動提供的構造函數稱為默認構造函數。自動提供的構造函數稱為默認構造函數。l構造函數一般用構造函數一般用public修飾符,但也可以用修飾符,但也可以用private創(chuàng)建私有構造函創(chuàng)建私有構造函數。私有構造函數是一種特殊的構造函數,通常用在只包含靜態(tài)成數。私有構造函數是一種特殊的構造函數,通常用在只包含靜態(tài)成員的類中,用來阻止該類被實例化。員的類中,用來阻

13、止該類被實例化。l如果不指定構造函數的訪問修飾符,默認是如果不指定構造函數的訪問修飾符,默認是private。但是,一般都。但是,一般都顯式地使用顯式地使用private修飾符來清楚地表明該類不能被實例化。修飾符來清楚地表明該類不能被實例化。4重載構造函數重載構造函數l構造函數可以被重載(構造函數可以被重載(Overloading),但不能被繼承。),但不能被繼承。133.1.4 構造函數和析構函數構造函數和析構函數5析構函數和自動內存管理析構函數和自動內存管理l析構函數析構函數析構函數是一種用于實現銷毀類實例所需操作的成員。析構函數是一種用于實現銷毀類實例所需操作的成員。析構函數不能帶參數,

14、也不能包含訪問修飾符。析構函數不能帶參數,也不能包含訪問修飾符。析構函數是自動調用的,不能顯式調用析構函數。析構函數是自動調用的,不能顯式調用析構函數。l自動內存管理自動內存管理由由C#使用垃圾回收器實現,即自動決定何時釋放和銷毀內存使用垃圾回收器實現,即自動決定何時釋放和銷毀內存。如果聲明如果聲明了了析構函數,開發(fā)人員析構函數,開發(fā)人員也也可通過可通過System.GC的靜態(tài)方法在一的靜態(tài)方法在一定程度上控制垃圾回收器的行為。該類可用于請求執(zhí)行一次回收操定程度上控制垃圾回收器的行為。該類可用于請求執(zhí)行一次回收操作、并自動判斷是否應該執(zhí)行析構函數。作、并自動判斷是否應該執(zhí)行析構函數。143.1

15、.5 字段和局部變量字段和局部變量字段是類的成員,局部變量是塊的成員。字段是類的成員,局部變量是塊的成員。1字段字段字段是指在類或結構中聲明的字段是指在類或結構中聲明的“類級別類級別”的變量?;蛘哒f,字段是整的變量?;蛘哒f,字段是整個類內部的所有方法和事件中都可以訪問的變量。個類內部的所有方法和事件中都可以訪問的變量。2只讀字段(只讀字段(readonly)readonly關鍵字用于聲明可以在程序運行期間只能初始化關鍵字用于聲明可以在程序運行期間只能初始化“一次一次”的的字段。初始化的方法有兩種,一種是在聲明語句中初始化該字段,另字段。初始化的方法有兩種,一種是在聲明語句中初始化該字段,另一種

16、是在構造函數中初始化該字段。一種是在構造函數中初始化該字段。3局部變量局部變量局部變量是相對于字段來說的??梢詫⒕植孔兞坷斫鉃榫植孔兞渴窍鄬τ谧侄蝸碚f的??梢詫⒕植孔兞坷斫鉃椤皦K塊”級別的級別的變量變量。153.1.6 結構的定義和成員組織結構的定義和成員組織l結構是值類型,它和類的主要區(qū)別是結構中的數據保存在堆棧(結構是值類型,它和類的主要區(qū)別是結構中的數據保存在堆棧(Stack)中而不是保存在堆()中而不是保存在堆(Heap)中。另外,所有結構都隱式地)中。另外,所有結構都隱式地從從Object繼承,但自定義結構時,不能從其他結構繼承。繼承,但自定義結構時,不能從其他結構繼承。l結構成員和

17、類成員相同,包括字段、結構成員和類成員相同,包括字段、屬性屬性、構造函數構造函數、方法、事件、方法、事件、運算符、索引器、析構函數等。運算符、索引器、析構函數等?!纠纠?-2】 分別用類和結構定義具有分別用類和結構定義具有x、y坐標的點,然后在主程序中坐標的點,然后在主程序中各創(chuàng)建并初始化一個含有各創(chuàng)建并初始化一個含有10個點的數組。個點的數組。163.2 屬性和方法屬性和方法l3.2.1 屬性(屬性(Property)l3.2.2 方法方法173.2.1 屬性屬性(Property)屬性屬性(property)是字段的擴展,用于提供對字段讀寫的手段。屬是字段的擴展,用于提供對字段讀寫的手段

18、。屬性和字段的區(qū)別是屬性不表示存儲位置,而是通過性和字段的區(qū)別是屬性不表示存儲位置,而是通過get訪問器和訪問器和set訪問器指定讀寫字段的值時需要執(zhí)行的語句。訪問器指定讀寫字段的值時需要執(zhí)行的語句。1. 常規(guī)屬性聲明常規(guī)屬性聲明如果需要對外公開某些字段,并對字段的值進行驗證,可以利用如果需要對外公開某些字段,并對字段的值進行驗證,可以利用屬性的屬性的get和和set訪問器來實現。訪問器來實現。2. 自動實現的屬性自動實現的屬性自動實現的屬性是指開發(fā)人員只需要聲明屬性,而與該屬性對應自動實現的屬性是指開發(fā)人員只需要聲明屬性,而與該屬性對應的字段則由系統自動提供。自動實現的屬性必須同時聲明的字段

19、則由系統自動提供。自動實現的屬性必須同時聲明get和和set訪問器。訪問器。183.2.2 方法方法方法是類或結構的一種成員,是一組程序代碼的集合,用于完成指定方法是類或結構的一種成員,是一組程序代碼的集合,用于完成指定的功能。每個方法都有一個方法名,便于識別和讓其他方法調用。的功能。每個方法都有一個方法名,便于識別和讓其他方法調用。1方法的聲明和參數傳遞方法的聲明和參數傳遞定義方法的一般形式為定義方法的一般形式為訪問修飾符訪問修飾符 返回值類型返回值類型 方法名方法名(參數序列參數序列) 語句序列語句序列方法聲明中的參數用于向方法傳遞值或變量引用。方法的參數從調用方法聲明中的參數用于向方法傳

20、遞值或變量引用。方法的參數從調用該方法時指定的實參獲取實際值。有四類參數:該方法時指定的實參獲取實際值。有四類參數:值參數、引用參數、值參數、引用參數、輸出參數和參數數組。輸出參數和參數數組。193.2.2 方法方法(1) 值參數值參數值參數(值參數(value parameter)用于傳遞輸入參數。一個值參數相當于)用于傳遞輸入參數。一個值參數相當于一個局部變量,只是它的初始值來自為該形參傳遞的實參。一個局部變量,只是它的初始值來自為該形參傳遞的實參?!纠纠?-3】演示值參數的基本用法?!垦菔局祬档幕居梅ā?03.2.2 方法方法(2) 引用參數引用參數 引用參數(引用參數(refer

21、ence parameter)用于傳遞輸入和輸出參數。為)用于傳遞輸入和輸出參數。為引用參數傳遞的實參必須是變量,并且在方法執(zhí)行期間,引用參數與引用參數傳遞的實參必須是變量,并且在方法執(zhí)行期間,引用參數與實參變量表示同一存儲位置。引用參數使用實參變量表示同一存儲位置。引用參數使用ref修飾符聲明。修飾符聲明?!纠纠?-4】演示引用參數的基本用法?!垦菔疽脜档幕居梅ā?13.2.2 方法方法(3) 輸出參數輸出參數輸出參數(輸出參數(output parameter)用于傳遞返回的參數,用)用于傳遞返回的參數,用out關鍵字關鍵字聲明。格式為聲明。格式為 out 參數類型參數類型 參數名

22、參數名【例【例3-5】演示】演示out關鍵字的用法。關鍵字的用法。223.2.2 方法方法(4) 參數數組參數數組 參數數組用于向方法傳遞可變數目的實參,用參數數組用于向方法傳遞可變數目的實參,用params關鍵字聲關鍵字聲明。如果方法有多個參數,只有最后一個參數才可以用參數數組聲明。如果方法有多個參數,只有最后一個參數才可以用參數數組聲明,并且參數數組的類型必須是一維數組類型。明,并且參數數組的類型必須是一維數組類型?!纠纠?-6】演示】演示params關鍵字的基本用法。關鍵字的基本用法。233.2.2 方法方法2. 方法重載方法重載方法重載是指具有相同的方法名,但參數類型或參數個數不完全

23、方法重載是指具有相同的方法名,但參數類型或參數個數不完全相同的多個方法可以同時出現在一個類中。這種技術非常有用,相同的多個方法可以同時出現在一個類中。這種技術非常有用,在項目開發(fā)過程中,我們會發(fā)現很多方法都需要使用方法重載來在項目開發(fā)過程中,我們會發(fā)現很多方法都需要使用方法重載來實現。實現。243.3 類的繼承與多態(tài)性類的繼承與多態(tài)性l3.3.1 封裝封裝l3.3.2 繼承繼承l(wèi)3.3.3 多態(tài)(多態(tài)(new、virtual、override)253.3.1 封裝封裝封裝一個類時,既可以像定義一個普通的類一樣,也可以將類聲明為封裝一個類時,既可以像定義一個普通的類一樣,也可以將類聲明為抽象類或

24、者密封類。抽象類或者密封類。1抽象類(抽象類(abstract class)抽象類使用抽象類使用abstract修飾符來描述,用于表示該類中的成員(例如方修飾符來描述,用于表示該類中的成員(例如方法)不一定實現,即可以只有聲明部分而沒有實現部分。抽象類只能法)不一定實現,即可以只有聲明部分而沒有實現部分。抽象類只能用做其他類的基類,而且無法直接實例化抽象類。用做其他類的基類,而且無法直接實例化抽象類。2密封類(密封類(sealed)密封類是指不能被其他類繼承的類。在密封類是指不能被其他類繼承的類。在C#語言中,用語言中,用sealed修飾符聲修飾符聲明密封類。由于密封類不能被其他類繼承,因此系

25、統就可以在運行時明密封類。由于密封類不能被其他類繼承,因此系統就可以在運行時對密封類中的內容進行優(yōu)化,從而提高系統的性能。對密封類中的內容進行優(yōu)化,從而提高系統的性能。263.3.2 繼承繼承繼承用于簡化類的設計工作量,同時還能避免設計的不一致性。一般繼承用于簡化類的設計工作量,同時還能避免設計的不一致性。一般將公共的、相同的部分放在被繼承的類中,非公共的、不相同的部將公共的、相同的部分放在被繼承的類中,非公共的、不相同的部分放在繼承的類中。分放在繼承的類中。1類繼承的一般形式類繼承的一般形式在在C#中,用冒號(中,用冒號(“:”)表示繼承。被繼承的類叫基類或者父類,)表示繼承。被繼承的類叫基

26、類或者父類,從基類繼承的類叫擴充類,又叫派生類或者子類。從基類繼承的類叫擴充類,又叫派生類或者子類。l繼承意味著一個類隱式地將它的基類的所有成員當作自已的成員,繼承意味著一個類隱式地將它的基類的所有成員當作自已的成員,而且派生類還能夠在繼承基類的基礎上繼續(xù)添加新的成員。但是,而且派生類還能夠在繼承基類的基礎上繼續(xù)添加新的成員。但是,基類的實例構造函數、靜態(tài)構造函數和析構函數除外?;惖膶嵗龢嬙旌瘮?、靜態(tài)構造函數和析構函數除外。l擴充類不能繼承基類中所定義的擴充類不能繼承基類中所定義的private成員,只能繼承基類的成員,只能繼承基類的public成員或成員或protected成員。成員。27

27、3.3.2 繼承繼承2繼承過程中構造函數的處理繼承過程中構造函數的處理l擴充類可繼承基類中聲明為擴充類可繼承基類中聲明為public或或protected的成員的成員。l構造函數構造函數在擴充類中在擴充類中不會被繼承下來。如果讓構造函數也能繼承,由于擴不會被繼承下來。如果讓構造函數也能繼承,由于擴充類中無法訪問基類的私有成員,從而導致程序運行失敗。充類中無法訪問基類的私有成員,從而導致程序運行失敗。lC#在內部按照下列順序處理構造函數:從擴充類依次向上尋找其基類,直在內部按照下列順序處理構造函數:從擴充類依次向上尋找其基類,直到找到最初的基類,然后開始執(zhí)行最初的基類的構造函數,再依次向下執(zhí)到找

28、到最初的基類,然后開始執(zhí)行最初的基類的構造函數,再依次向下執(zhí)行擴充類的構造函數,直至執(zhí)行完最終的擴充類的構造函數為止。行擴充類的構造函數,直至執(zhí)行完最終的擴充類的構造函數為止?!纠纠?-7】演示繼承的基本用法?!垦菔纠^承的基本用法。283.3.3 多態(tài)多態(tài)(new、virtual、override)多態(tài)性的定義是:同一操作可分別作用于不同的類的實例,此時不同多態(tài)性的定義是:同一操作可分別作用于不同的類的實例,此時不同的類將進行不同的解釋,最后產生不同的執(zhí)行結果。的類將進行不同的解釋,最后產生不同的執(zhí)行結果。1虛擬(虛擬(virtual)和重寫()和重寫(override)使用虛擬方法與重寫方

29、法時,需要注意下面幾個方面。使用虛擬方法與重寫方法時,需要注意下面幾個方面。l虛擬方法不能聲明為靜態(tài)(虛擬方法不能聲明為靜態(tài)(static)的。因為靜態(tài)的方法是應用在類)的。因為靜態(tài)的方法是應用在類這一層次的,而面向對象的多態(tài)性只能通過對象進行操作,所以無這一層次的,而面向對象的多態(tài)性只能通過對象進行操作,所以無法通過類名直接調用。法通過類名直接調用。lvirtual不能和不能和private一起使用。聲明為一起使用。聲明為private就無法在擴充類中重就無法在擴充類中重寫了。寫了。l重寫方法的名稱、參數個數、參數類型以及返回類型都必須和虛擬重寫方法的名稱、參數個數、參數類型以及返回類型都必

30、須和虛擬方法的一致。方法的一致。293.3.3 多態(tài)多態(tài)(new、virtual、override)2. 隱藏(隱藏(new)l編寫方法時,如果希望擴充類重寫基類的方法,需要在擴充類中用編寫方法時,如果希望擴充類重寫基類的方法,需要在擴充類中用override聲明;如果希望隱藏基類的方法,在擴充類中需要用聲明;如果希望隱藏基類的方法,在擴充類中需要用new聲聲明,這就是明,這就是C#語言進行版本控制的依據。語言進行版本控制的依據。l除了重寫基類的方法外,還可以在擴充類中使用除了重寫基類的方法外,還可以在擴充類中使用new修飾符來隱藏修飾符來隱藏基類中同名的方法?;愔型姆椒?。l與方法重寫不

31、同的是,使用與方法重寫不同的是,使用new關鍵字時并不要求基類中的方法聲關鍵字時并不要求基類中的方法聲明為明為virtual,只要在擴充類的方法前聲明為,只要在擴充類的方法前聲明為new,就可以隱藏基類的,就可以隱藏基類的方法。方法。303.3.3 多態(tài)多態(tài)(new、virtual、override)3. 在擴充類中直接調用基類的方法在擴充類中直接調用基類的方法可以在擴充類中通過可以在擴充類中通過base關鍵字直接調用基類的方法,例如:關鍵字直接調用基類的方法,例如:class MyBaseClass public virtual int MyMethod() return 5; class

32、MyDerivedClass : MyBaseClass public override int MyMethod() return base.MyMethod () * 4; 313.4 常用結構和類的用法常用結構和類的用法l3.4.1 Math類類l3.4.2 DateTime結構和結構和TimeSpan結構結構l3.4.3 秒表秒表和和計時計時器器l3.4.4 隨機數隨機數323.4.1 Math類類Math類定義了各種常用的數學運算,該類位于類定義了各種常用的數學運算,該類位于System命名空間下,命名空間下,其作用有兩個,一個是為三角函數、對數函數和其他通用數學函數提其作用有兩個,一個是為三角函數、對數函數和其他通用數學函數提供常數,如供常數,如PI值等;二是通過靜態(tài)方法提供了各種數學運算功能。值等;二是通過靜態(tài)方法提供了各種數學運算功能?!纠纠?-8】演示】演示Math類的基本用法。類的基本用法。333.4.2 DateTime結構和結構和TimeSpan結構結構用于用于對日

溫馨提示

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

評論

0/150

提交評論