




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、 第14章 深入理解C#語言內(nèi)容提要n類型與轉換n變量及其傳遞n多態(tài)與虛方法調(diào)用n動態(tài)類型確定n對象構造與析構ncsharp語言新特性1 類型與轉換數(shù)據(jù)類型nC#的數(shù)據(jù)類型分值類型(Value Type)和引用類型(Reference Type)兩大類n值類型包括n簡單類型(Simple Type)n結構類型(Struct Type)n枚舉類型(Enum Type)n引用類型包括n類類型(Class Type)n數(shù)組類型(Array Type)n指代類型(Delegate)Reference and Value TypesReference引用型(Class)Value 值(Struct)分配
2、Heap 堆Inline 棧默認值NullZeroed= 的含義復制引用復制值變量中的內(nèi)容引用實際值示例 year day p month q m n 棧內(nèi)存 堆內(nèi)存 Class&Struct.cs值類型的轉換n數(shù)字類型之間可以互相轉化n隱式轉換 float f = 3;n顯式轉換 int i = (int)3.14;n整型提升 sbyte a=1,b=2; a+b為int型n枚舉類型與數(shù)字類型之間可以顯式轉換n結構類型之間不能轉換 引用類型轉換 n顯式或隱式轉換(都要求有繼承關系)nPerson p = new Student(); /隱式轉換nStudent s = (Studen
3、t) p; / 顯式轉換n可能轉成功,也可能異常nIRunnable r = p; /隱式轉換nas 運算符nStudent s = p as Student; n可能成功,也可能為nullAsObject.cs引用類型與值類型的轉換iojBoxing and unboxingUnboxing必須顯式轉換BoxingTest.cs2 變量及其傳遞域變量及局部變量n類static變量n相當于類中的“全局變量”n域變量n相當于對象中的變量n局部變量n在函數(shù)體及其中,在棧中分配,自動消失n域變量自動有初值,局部變量則不LocalVarAndMemberVar.cs按值傳送的參數(shù)n按值傳送n要注意值類
4、型與引用類型nTransByValue.cs TransByValueStructClass.cs ref參數(shù)及out參數(shù) nref參數(shù)在傳之間必先賦值nout參數(shù)在函數(shù)中必須賦值后才能返回n表達式及對象的屬性不能作ref及out參數(shù)nTransByRef.csnRefSwap.csnTransByOut.csnRefColorRGB.csparam參數(shù)n數(shù)組參數(shù)(相當于VB的可變參數(shù))n參數(shù)必須放在最后n調(diào)用時,可用數(shù)組,也可用多個參數(shù)n定義:ndouble Multi( params double nums ) n調(diào)用nMulti();nMulti( 27 );nMulti( 3.14,
5、0.9, 0.9 );nMulti( 1,2,3,4,5);nMulti( new double 1,2,3,4,5 );ParamsTest.cs3 多態(tài)與虛方法調(diào)用 多態(tài)(Polymorphism)n在面向?qū)ο蟮南到y(tǒng)中,多態(tài)性是一個非常重要的概念,它允許客戶對一個對象進行操作,由對象來完成一系列的動作,具體實現(xiàn)哪個動作、如何實現(xiàn)由系統(tǒng)負責解釋。n在C#中,多態(tài)性的定義是,同一操作作用于不同的類的實例,不同的類將進行不同的解釋,最后產(chǎn)生不同的執(zhí)行結果。C#支持兩種類型的多態(tài)性。4-2兩種類型的多態(tài)性 n編譯時的多態(tài)性n編譯時的多態(tài)是通過重載來實現(xiàn)的。對于非虛的成員來說,系統(tǒng)在編譯時,根據(jù)傳遞
6、的參數(shù)、返回的類型等信息決定實現(xiàn)何種操作。n運行時的多態(tài)性n運行時的多態(tài)性是指直到系統(tǒng)運行時,才根據(jù)實際情況決定實現(xiàn)何種操作。C#中,運行時的多態(tài)性通過虛成員實現(xiàn)。n編譯時的多態(tài)性提供了運行速度快的特點,而運行時的多態(tài)性則帶來了高度靈活和抽象的特點。上溯造型與虛方法調(diào)用VirtualInvokeShape.csstatic void doStuff( Shape s )s.draw();Shape c = new Circle();Shape r = new Rectangle();Shape s = new Square();doStuff(c);doStuff(r);doStuff(s);
7、虛方法的語法規(guī)范n必須有virtualvirtual或abstractabstract或overrideoverride所修飾。n虛方法不能省略訪問控制符,不能是private的,不能是static的,因為它們應該可以被子類所覆蓋。n子類中要覆蓋父類的虛方法,必須用overrideoverride。否則認為是新(new)的一個方法,并隱藏了父類的方法,不會實行虛方法調(diào)用。n覆蓋和被覆蓋的方法必須有相同的可訪問性和相同的返回類型。虛方法與非虛方法的區(qū)別n虛方法調(diào)用的方法是由對象實例的類型所決定n非虛方法調(diào)用的方法是由所聲明的對象變量來決定的。VirtualAndNoneVirtual.cs最可派
8、生的方法n當多次派生,并有virtual與非virtual方法時VirtualComplex.cs4 動態(tài)類型確定is運算符n用于判斷運行時對象的類型n格式:對象 is 類型n不是nulln可轉換,而不異常IsTest.cs= 與 !=n值類型相等n引用類型的相等n是判斷是否是同一對象n除非重載了=及!=操作n對于string等類型,已經(jīng)進行了重載n對于兩個boxing的對象,=總是false得到類型信息ntypeof運算符ntypeof(System.Console)n對象.GetType()nType.GetType(string 類名)TypeGetType.csTypeGetMembe
9、rs.cs反射n反射ReflectionReflectionTest.cs5 對象構造與析構構造方法n構造方法的初始化部分,使用this及basen調(diào)用本類或父類的構造方法n不用this且不用base,則會自動認為base() class AA(int a) class B : AB(String s ) /編譯不能通過ConstructCallThisAndBase.cs域的初始化n域的初始化中不能引用thisn在base被調(diào)用之前不能引用 this class B : Aint x = 1;int M() return 1; int y = x+M(); /ErrorB():base(x)
10、 /Error構造方法的執(zhí)行過程 n執(zhí)行過程n若有this(),轉向之n執(zhí)行域的初始化n轉到basen執(zhí)行方法體n應避免在構造方法中調(diào)用任何虛方法 ConstructorExecution.cs靜態(tài)構造方法n靜態(tài)構造方法總是在該類的所有靜態(tài)域初始化之后執(zhí)行;n靜態(tài)構造方法總是在該類被使用(如訪問靜態(tài)域、生成實例)之前完成;n靜態(tài)構造方法最多被執(zhí)行一次。n靜態(tài)構造方法的執(zhí)行順序的不確定性,所以在使用構造方法時應謹慎 n應盡量避免在靜態(tài)初始化或靜態(tài)域中出現(xiàn)循環(huán)引用的情況。 nstatic int a=b+1; static int b=a+1;析構方法 n析構方法n類名()n析構方法會自動調(diào)用父類
11、的構造方法n注:n編譯器生成的構造方法名字為ctor()n生成的析構方法名字為Finalize()n不能顯式地調(diào)用析構方法自動垃圾回收 n垃圾回收(garbage collection)n自動回收n“強制”回收 System.GC();String a,b;a = String.Copy(hello world);b = String.Copy(game over);Console.WriteLine(a+b+ok);a = null;a = b;return a;顯式資源管理n實現(xiàn)IDisposable接口n其中有方法:nvoid Dispose();使用using語句R r1 = new
12、R();try r1.F();finally if (r1 != null) (IDisposable)r1).Dispose();using ( R r1 = new R() )r1.F();小結n類型與轉換nas boxingn變量及其傳遞n按值 out ref paramsn多態(tài)與虛方法調(diào)用nabstract, virtual overriden動態(tài)類型確定ntypeof is = != 反射n對象構造與析構n構造順序 IDisposable using 6. csharp語言新特性nC#2.0 引入泛型nC#3.0 引入Lambda及LinqnC#4.0 更多的動態(tài)特性dynmaic泛
13、型(Generic)nList books=new List();nBook book = books0;n/以前要用強制類型轉換nArrayList books = new ArrayList();nBook book = (Book) books0;常用的泛型的delegatenFuncn多個參數(shù)FuncnActionn多個參數(shù)ActionnPredicatenComparisonnConverternEventHandler匿名方法ndelegate(參數(shù)) 方法體n可以當一個匿名方法nnew Thread(nnew ThreadStart( delegate() . ) );n可以被隱式轉換為一個兼容的委托類型nn
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工業(yè)節(jié)能減排的技術與方法探討
- 工作室綠化對身體健康的促進作用研究
- 工業(yè)設計原理與創(chuàng)新方法探討
- 工業(yè)設計的發(fā)展與創(chuàng)新
- 工業(yè)風環(huán)境設計的風格特點與實踐案例
- 工作與生活平衡的職場發(fā)展策略
- 工程信息化背景下現(xiàn)代工程管理的新思路
- 工程數(shù)學實現(xiàn)工程項目的基石
- 工程機械中復雜結構的焊接工藝分析
- 工程建筑行業(yè)的安全管理實踐
- 《一元一次方程》參考課件
- 消除“艾梅乙”醫(yī)療歧視-從我做起
- 《阿凡達》電影賞析
- GB/T 44625-2024動態(tài)響應同步調(diào)相機技術要求
- 商業(yè)倫理與職業(yè)道德學習通超星期末考試答案章節(jié)答案2024年
- 系統(tǒng)商用密碼應用方案v5-2024(新模版)
- 基于單片機的彩燈控制器設計
- 2024至2030年中國醫(yī)療信息化市場潛力與投資前景分析報告
- 四川省成都市成華區(qū)2023-2024學年七年級下學期期末生物試題(原卷版)
- 走進黃帝內(nèi)經(jīng)文化殿堂智慧樹知到答案2024年上海中醫(yī)藥大學
- 配電房預試驗服務和維保方案
評論
0/150
提交評論