《C-程序設(shè)計項目教程》教學(xué)課件-項目七_第1頁
《C-程序設(shè)計項目教程》教學(xué)課件-項目七_第2頁
《C-程序設(shè)計項目教程》教學(xué)課件-項目七_第3頁
《C-程序設(shè)計項目教程》教學(xué)課件-項目七_第4頁
《C-程序設(shè)計項目教程》教學(xué)課件-項目七_第5頁
已閱讀5頁,還剩65頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

C#程序設(shè)計

工程教程計算機“十二五〞規(guī)劃教材工程七C#程序設(shè)計

工程教程計算機“十二五〞規(guī)劃教材工程七C#程序設(shè)計工程教程工程七類與對象——抽象與實體的完美結(jié)合學(xué)習(xí)任務(wù)掌握類的聲明方法。掌握對象的創(chuàng)立和使用方法。掌握構(gòu)造函數(shù)和析構(gòu)函數(shù)的使用方法。掌握this關(guān)鍵字和屬性的使用方法。C#程序設(shè)計工程教程工程七類與對象——抽象與實體的完美2C#程序設(shè)計工程教程任務(wù)安排任務(wù)一初識類與對象

任務(wù)二

深入學(xué)習(xí)類的成員

工程七類與對象——抽象與實體的完美結(jié)合C#程序設(shè)計工程教程任務(wù)安排工程七類與對象——抽象與實3C#程序設(shè)計工程教程任務(wù)一初識類與對象任務(wù)說明預(yù)備知識在本任務(wù)中,將向讀者介紹類與對象的根本知識。一、聲明類類需要先聲明后使用,聲明類的語法結(jié)構(gòu)如下:[<修飾符>]class<類名>[:<基類名>]{//類成員}//無需分號聲明類時先指定類本身的修飾符,類的修飾符包括訪問修飾符〔internal、public、private和protected〕和其他功能修飾符〔new、abstract、sealed和partial〕,當(dāng)有兩種修飾符同時修飾類時,訪問修飾符排在功能修飾符前;然后是類的名稱、基類〔如果此類為繼承類〕;聲明頭后面是類體,類體由一對大括號組成,類體中包含C#的類成員。C#程序設(shè)計工程教程任務(wù)一初識類與對象任務(wù)說明預(yù)備知識在4C#程序設(shè)計工程教程各修飾符含義如下表所示:注意:abstract不能和new同時用,

類繼承時如果基類的可訪問性比派生類的可訪問性低,那么不可以繼承;abstract和sealed修飾符也是被禁止同時使用的。C#程序設(shè)計工程教程各修飾符含義如下表所示:注意:5C#程序設(shè)計工程教程下面我們先來簡單了解一下嵌套類、基類與派生類的概念。〔一〕嵌套類在類或結(jié)構(gòu)內(nèi)聲明的類稱為嵌套類〔nested-type〕,在編譯單元或命名空間內(nèi)聲明的類為非嵌套類。usingSystem;classA{privateclassB{staticvoidF(){Console.WriteLine("......");}}}類B在類A中聲明,是嵌套類;類A在編譯單元內(nèi)聲明,是非嵌套類。C#程序設(shè)計工程教程下面我們先來簡單了解一下嵌套類、基類與派6C#程序設(shè)計工程教程〔二〕基類與派生類在定義類的時候,如果類n繼承自類m,那么將類m稱為類n的基類,類n那么是類m的派生類。例如,下面代碼中定義的MobilePhone類就是類Phone的派生類,類Phone是類MobilePhone的基類。publicclassMobilePhone:Phone{//類成員}每一個類只能指明一個基類,并且內(nèi)部類可以繼承一個公共類,但是公共類不能繼承一個內(nèi)部類。C#程序設(shè)計工程教程〔二〕基類與派生類在定義類的7C#程序設(shè)計工程教程二、類的成員創(chuàng)立一個C#類后,在類內(nèi)的所有元素都是這個類的成員,可以將其分為數(shù)據(jù)成員和函數(shù)成員兩類。〔一〕數(shù)據(jù)成員數(shù)據(jù)成員包括字段和常量兩種。1.字段在類內(nèi)定義的變量成員被稱之為字段。字段可以預(yù)先初始化聲明,聲明的字段將作用于整個類。classPhone{stringcompany="NOKIA"; //定義一個變量用于存儲品牌名稱floatprice=2021; //定義一個變量用于存儲價格}C#程序設(shè)計工程教程二、類的成員創(chuàng)立一個C#類8C#程序設(shè)計工程教程根據(jù)修飾符的不同,字段可以分為靜態(tài)字段、實例字段和只讀字段?!?〕靜態(tài)字段

用修飾符static聲明的字段稱為靜態(tài)字段,靜態(tài)字段屬于類而不屬于某個對象。引用靜態(tài)字段的方法為:類名.靜態(tài)字段名?!?〕實例字段未使用修飾符static的字段都可以稱為實例字段。每創(chuàng)立類的一個對象就會在對象內(nèi)創(chuàng)立一個該字段實例,創(chuàng)立它的對象被撤銷該實例字段也被撤銷。引用實例字段的方法為:實例名.實例字段名?!?〕只讀字段

使用readonly修飾符聲明的字段為只讀字段。只讀字段是特殊的實例字段,它只能在字段聲明或構(gòu)造函數(shù)中重新賦值,在其他任何地方都不能改變只讀字段的值。C#程序設(shè)計工程教程根據(jù)修飾符的不同,字段可以分為靜態(tài)字段、9C#程序設(shè)計工程教程2.常量用const修飾符聲明的字段為常量。常量只能在聲明中初始化,以后不能再修改。classMobilePhone{conststringcompany="NOKIA"; //定義一個常量用于存儲品牌名稱floatprice=1999; //定義一個變量用于存儲價格conststringmodel="N98"; //定義一個常量用于存儲型號}C#程序設(shè)計工程教程2.常量用const修飾符聲明的10C#程序設(shè)計工程教程來看一個綜合應(yīng)用數(shù)據(jù)成員的例子:publicclassTest{ publicconstintintMax=int.MaxValue; //常量,必須賦初值publicintx=0; //實例字段publicreadonlyinty=0; //只讀字段publicstaticintcnt=0; //靜態(tài)字段publicTest(intx1,inty1) //構(gòu)造函數(shù){//intMax=0; //錯誤,不能修改常量x=x1; //在構(gòu)造函數(shù)內(nèi)允許修改實例字段y=y1; //在構(gòu)造函數(shù)內(nèi)允許修改只讀字段cnt++;}//每創(chuàng)立一個對象都調(diào)用構(gòu)造函數(shù),用此語句可以記錄對象的個數(shù)publicvoidModify(intx1,inty1){//intMax=0; //錯誤,不能修改常量 x=x1; cnt=y1; //y=10; }} //不允許修改只讀字段C#程序設(shè)計工程教程來看一個綜合應(yīng)用數(shù)據(jù)成員的例子:publ11C#程序設(shè)計工程教程〔二〕函數(shù)成員C#類的函數(shù)成員主要包括方法、屬性、索引器、事件、運算符、構(gòu)造函數(shù)和析構(gòu)函數(shù)。classClass1{staticvoidMain(string[]args){ TestT1=newTest(100,200); T1.x=40; //引用實例字段方法:實例名.實例字段名 Testt=0; //引用靜態(tài)字段方法:類名.靜態(tài)字段名 intz=T1.y; //引用只讀字段 z=TMax; //引用常量}}C#程序設(shè)計工程教程〔二〕函數(shù)成員C#類的函數(shù)成12C#程序設(shè)計工程教程〔三〕類成員訪問修飾符所有類成員都具有可訪問性級別,可通過訪問修飾符來控制類成員的可訪問范圍,以實現(xiàn)數(shù)據(jù)和代碼的隱藏。C#定義了如下五種訪問修飾符,其含義如下表所示。C#程序設(shè)計工程教程〔三〕類成員訪問修飾符所有類13C#程序設(shè)計工程教程三、對象C#中的類是抽象的,如果要使用類來實現(xiàn)某項特定功能,必須要將類實例化,既創(chuàng)立類的對象。這里讀者可以將類理解為生產(chǎn)產(chǎn)品時用到的模具,而對象就是生產(chǎn)出來的產(chǎn)品?!惨弧硠?chuàng)立對象在類中創(chuàng)立對象的格式如下:<對象名>=new<構(gòu)造方法名>([參數(shù)列表]);為Phone類創(chuàng)立一個對象Nokia,代碼如下:PhoneNokia=newPhone();在C#面向?qū)ο蟪绦蛟O(shè)計語言中,創(chuàng)立類的對象、創(chuàng)立類的實例和實例化類等說法含義相同,都是以類為模板生成一個類對象。在使用關(guān)鍵字new創(chuàng)立一個類的對象時,將為對象分配一塊內(nèi)存,每一個對象都有不同的內(nèi)存,因此,兩個不同的對象,即使他們的代碼都相同,也是單獨的兩個個體。C#程序設(shè)計工程教程三、對象C#中的類是抽象的,如14C#程序設(shè)計工程教程〔二〕使用對象在C#中,類對象使用點運算符“.〞來引用類中成員,并且引用的范圍受成員的訪問修飾符的限制。classclass1 //定義一個類class1{publicstringstr; //定義字符型公共變量strprotectedstringstr1; //定義字符型受保護變量str1privatestringstr2; //定義字符型私有變量str2internalstringstr3; //定義字符型內(nèi)部變量str3publicvoidway() //定義一個沒有任何返回類型的公共方法

way{……}}classclass2{publicstaticvoidMain(){class1dx=newclass1(); //創(chuàng)立一個class1的對象dxdx.str="a"; //此條語句正確,在程序內(nèi)能引用public成員//dx.str1="b"; //此條語句錯誤,在類外不能引用protected成員//dx.str2="c"; //此條語句錯誤,在類外不能引用private成員dx.str3="d"; //此條語句正確,在程序內(nèi)能引用internal成員dx.way(); //此條語句正確,在程序內(nèi)能引用public成員}}C#程序設(shè)計工程教程〔二〕使用對象在C#中,類對15C#程序設(shè)計工程教程任務(wù)實施——獲取品牌信息使用“類與對象〞的相關(guān)知識創(chuàng)立應(yīng)用程序,在程序中完成類的建模,并根據(jù)類生成新的對象,根據(jù)用戶輸入的品牌名稱,輸出相應(yīng)信息。任務(wù)說明實施步驟步驟1新建一個控制臺應(yīng)用程序,將其命名為Phone,在文件中輸入創(chuàng)立類與對象的代碼,如【代碼7-1】所示。C#程序設(shè)計工程教程任務(wù)實施——獲取品牌信息使16C#程序設(shè)計工程教程【代碼7-1】創(chuàng)立類與對象。namespacePhone{publicclass //創(chuàng)立一個“〞類{publicstring品牌;publicstring型號;publicstring顏色;publicdecimal價格;}class移動 //創(chuàng)立一個移動類{publicvoid1() //定義一個方法“1〞{1=new(); //創(chuàng)立一個新的對象“1〞1.品牌="NOKIA“;1.型號="N98";1.顏色="黑色“;1.價格=4999;Console.WriteLine("您選擇的信息如下:");Console.WriteLine("品牌:"+1.品牌);Console.WriteLine("型號:"+1.型號);Console.WriteLine("顏色:"+1.顏色);Console.WriteLine("價格:"+1.價格);Console.WriteLine("謝謝您的參與!");Console.ReadKey();}C#程序設(shè)計工程教程【代碼7-1】創(chuàng)立類與對象。17C#程序設(shè)計工程教程publicvoid2() //定義一個方法“2〞{2=new();//創(chuàng)立一個新的對象“2〞2.品牌="MOTO“;2.型號="MOTOME525";2.顏色="紅色“;2.價格=1989;Console.WriteLine("您選擇的信息如下:");Console.WriteLine("品牌:"+2.品牌);Console.WriteLine("品牌:"+2.型號);Console.WriteLine("型號:"+2.顏色);Console.WriteLine("顏色:"+2.價格);Console.WriteLine("謝謝您的參與!");Console.ReadKey();}publicvoid3() //定義一個方法“3〞{3=new();//創(chuàng)立一個新的對象“3〞3.品牌="聯(lián)想“;3.型號="聯(lián)想E268翻蓋";3.顏色="珍珠白“;3.價格=1399;Console.WriteLine("您選擇的信息如下:");Console.WriteLine("品牌:"+3.品牌);Console.WriteLine("型號:"+3.型號);Console.WriteLine("顏色:"+3.顏色);Console.WriteLine("價格:"+3.價格);Console.WriteLine("謝謝您的參與!");Console.ReadKey();}C#程序設(shè)計工程教程publicvoid2()18C#程序設(shè)計工程教程staticvoidMain(string[]args){Console.WriteLine("請輸入品牌名稱:NOKIA、MOTO、Lenovo");stringinput=Console.ReadLine();移動Mobile=new移動();switch(input){case"NOKIA":Mobile.1();break;case"MOTO":Mobile.2();break;case"Lenovo":Mobile.3();break;default:Console.WriteLine("請輸入正確的品牌名稱!");Console.ReadKey();break;}}}}C#程序設(shè)計工程教程staticvoidMain(st19C#程序設(shè)計工程教程步驟2按【F5】鍵,調(diào)試程序,得到如以下圖所示的運行結(jié)果。C#程序設(shè)計工程教程步驟2按【F5】鍵,調(diào)試程序,得到如20C#程序設(shè)計工程教程任務(wù)二深入學(xué)習(xí)類的成員任務(wù)說明本任務(wù)中將學(xué)習(xí)類中較難理解的一些概念。預(yù)備知識一、構(gòu)造函數(shù)〔一〕構(gòu)造函數(shù)的概念構(gòu)造函數(shù)具有與類相同的名稱,用于在創(chuàng)立對象時初始化對象。其聲明格式如下:class類名稱 //創(chuàng)立類{public類名稱([參數(shù)列表])//創(chuàng)立構(gòu)造函數(shù){……}}C#程序設(shè)計工程教程任務(wù)二深入學(xué)習(xí)類的成員任務(wù)說明本任務(wù)21C#程序設(shè)計工程教程每個類都有構(gòu)造函數(shù),即使我們沒有聲明它,編譯器也會自動為我們提供一個默認(rèn)的構(gòu)造函數(shù)。構(gòu)造函數(shù)與普通方法的不同之處在于:構(gòu)造函數(shù)的名稱必須和類名完全相同。構(gòu)造函數(shù)沒有返回值,也不能用void來修飾。構(gòu)造函數(shù)一般不能直接顯式調(diào)用,在創(chuàng)立對象時系統(tǒng)會自動調(diào)用。C#程序設(shè)計工程教程每個類都有構(gòu)造函數(shù),即使我們沒22C#程序設(shè)計工程教程〔二〕構(gòu)造函數(shù)的重載在C#中,一個類可以有多個構(gòu)造函數(shù),其重載方法與普通方法相同,用戶可以通過傳遞不同的參數(shù)來實現(xiàn)對不同類實例的初始化處理?!踩呈褂盟接袠?gòu)造函數(shù)如果將構(gòu)造函數(shù)聲明為private類型,那么說明此類不允許其他類〔除了嵌套類〕創(chuàng)立該類的實例,通常只用于含有靜態(tài)成員的類。〔四〕使用靜態(tài)構(gòu)造函數(shù)用關(guān)鍵字static聲明的構(gòu)造函數(shù)稱為靜態(tài)構(gòu)造函數(shù),當(dāng)用戶需要初始化一些靜態(tài)變量的時就需要使用靜態(tài)構(gòu)造函數(shù)。靜態(tài)構(gòu)造函數(shù)只會執(zhí)行一次,它是屬于類的,而不是只屬于某個實例。C#程序設(shè)計工程教程〔二〕構(gòu)造函數(shù)的重載在C#中,一23C#程序設(shè)計工程教程類中的靜態(tài)構(gòu)造函數(shù)具有以下特點:既沒有訪問修飾符,也沒有參數(shù)。在創(chuàng)立第一個實例或引用任何靜態(tài)成員之前,將自動調(diào)用靜態(tài)構(gòu)造函數(shù)來初始化類。用戶不能直接調(diào)用靜態(tài)構(gòu)造函數(shù)且無法控制何時執(zhí)行靜態(tài)構(gòu)造函數(shù)。一個類只能有一個靜態(tài)構(gòu)造函數(shù),但可以同時擁有靜態(tài)構(gòu)造函數(shù)和實例構(gòu)造函數(shù)。靜態(tài)構(gòu)造函數(shù)只能訪問類的靜態(tài)成員,不能訪問實例成員。C#程序設(shè)計工程教程類中的靜態(tài)構(gòu)造函數(shù)具有以下特點:既24C#程序設(shè)計工程教程二、析構(gòu)函數(shù)構(gòu)造函數(shù)的功能是在創(chuàng)立對象時將對象初始化。析構(gòu)函數(shù)與構(gòu)造函數(shù)的功能正好相反,它用來釋放一個對象所占用的內(nèi)存。析構(gòu)函數(shù)的名稱由類名前加上“~〞字符構(gòu)成,聲明格式如下:class類名{~類名()//聲明析構(gòu)函數(shù){......}}析構(gòu)函數(shù)具有以下幾個特征:

沒有返回值,沒有修飾符,也沒有參數(shù)一個類只能有一個析構(gòu)函數(shù)

不能繼承或重載析構(gòu)函數(shù)

不能顯式調(diào)用析構(gòu)函數(shù),它們是系統(tǒng)自動調(diào)用的C#程序設(shè)計工程教程二、析構(gòu)函數(shù)構(gòu)造函數(shù)的功能是在創(chuàng)25C#程序設(shè)計工程教程三、this關(guān)鍵字關(guān)鍵字this有兩種根本的用法:一是訪問當(dāng)前類成員,二是在聲明構(gòu)造函數(shù)時指定需要先執(zhí)行的構(gòu)造函數(shù)。〔一〕訪問當(dāng)前類成員在使用this關(guān)鍵字訪問當(dāng)前類成員時要注意以下兩點:this是類中隱含的引用變量,它是被自動被賦值的,可以使用但不能被修改。類的靜態(tài)成員不是某個對象的一局部,因此,在靜態(tài)方法中引用this關(guān)鍵字是錯誤的。C#程序設(shè)計工程教程三、this關(guān)鍵字關(guān)鍵字this26C#程序設(shè)計工程教程〔二〕this用于構(gòu)造函數(shù)聲明在C#構(gòu)造函數(shù)中,可以使用如下的形式來聲明構(gòu)造函數(shù):<訪問修飾符>類名(形式參數(shù)表):this(實際參數(shù)表){//語句塊}其中this表示該類本身所聲明的、形式參數(shù)表與實際參數(shù)表最匹配的另一個實例構(gòu)造函數(shù),這個構(gòu)造函數(shù)會在執(zhí)行正在聲明的構(gòu)造函數(shù)之前執(zhí)行。C#程序設(shè)計工程教程〔二〕this用于構(gòu)造函數(shù)聲明在C#構(gòu)造27C#程序設(shè)計工程教程classM //定義M類{publicM(intn) //聲明一個關(guān)鍵字的構(gòu)造函數(shù){Console.WriteLine("M.M(intn)");}publicM(strings,intn):this(0) //聲明兩個關(guān)鍵字的構(gòu)造函數(shù){Console.WriteLine("M.M(strings,intn)");}}classTest //定義Test類{staticvoidMain(){Ma=newM("MClass",1); //定義實例對象aConsole.ReadKey();}}C#程序設(shè)計工程教程classM //定義M類28C#程序設(shè)計工程教程四、屬性為防止在對象不知道的情況下私有字段被更改,C#中提出了屬性的概念,其定義的形式為:訪問修飾符數(shù)據(jù)類型標(biāo)識符{//訪問器聲明;}訪問器有g(shù)et訪問器和set訪問器兩種,其聲明的格式如下:get{return要訪問的成員;}set{要設(shè)置值的成員=value;}value是C#的關(guān)鍵字,是進行屬性操作時set的隱含參數(shù)。C#程序設(shè)計工程教程四、屬性為防止在對象不知道的情29C#程序設(shè)計工程教程屬性提供了兩種訪問操作:get和set〔至少應(yīng)包括其中的一個〕。當(dāng)讀取屬性時,執(zhí)行g(shù)et訪問器的代碼塊;當(dāng)向?qū)傩苑峙湟粋€新值時,執(zhí)行set訪問器的代碼塊。不具有set訪問器的屬性被視為只讀屬性,不具有g(shù)et訪問器的屬性被視為只寫屬性,同時具有這兩個訪問器的屬性被視為讀寫屬性。使用get訪問器時要注意,其使用return要返回的值必須與屬性聲明的數(shù)據(jù)類型相同,或能夠隱式地轉(zhuǎn)換為屬性聲明的數(shù)據(jù)類型。set訪問器的值是通過隱含的參數(shù)value帶進來的,其數(shù)據(jù)類型也必須與屬性聲明的數(shù)據(jù)類型相同或能夠進行隱式轉(zhuǎn)換。C#程序設(shè)計工程教程屬性提供了兩種訪問操作:get30C#程序設(shè)計工程教程publicclassDate{privateintmonth=7;publicintMonth{get{returnmonth;}set{if((value>0)&&(value<=12)){month=value;}}}}Month是作為屬性聲明的,這樣set訪問器可確保Month值設(shè)置在0和12之間。訪問屬性值的語法格式和訪問變量根本相同:DateS=newDate();S.Month=10;C#程序設(shè)計工程教程publicclassDate31C#程序設(shè)計工程教程任務(wù)實施——計算矩形面積任務(wù)說明設(shè)計一控制臺程序計算矩形的面積。通過屬性的相關(guān)知識來控制矩形變長〔即長和寬數(shù)值〕的異常,當(dāng)變長為負(fù)數(shù)時給出異常信息。實施步驟步驟1 新建一控制臺應(yīng)用程序,將其命名為Test,在文件中輸入控制代碼,如【代碼7-2】所示。【代碼7-2】namespaceTest{classmm{privateintwidth;protectedintheight;publicintWidth{get{returnwidth;}set //假設(shè)所賦的值不合理,那么會輸出指定的提示。{if(value>0)width=value;elseConsole.WriteLine("寬的值不能為負(fù)數(shù)!");}}C#程序設(shè)計工程教程任務(wù)實施——計算矩形面積任務(wù)說明32C#程序設(shè)計工程教程publicintHeight{get{returnheight;}set{if(value>0)height=value;elseConsole.WriteLine("高的值不能為負(fù)數(shù)!");}}publicintArea{get{returnwidth*height;}}publicmm(){}publicmm(intx,inty){Width=x;Height=y;}C#程序設(shè)計工程教程publicintHeight33C#程序設(shè)計工程教程staticvoidMain(string[]args){mmrect=newmm();rect.Width=3;rect.Height=8;Console.WriteLine("寬={0},高={1},面積={2}",rect.Width,rect.Height,rect.Area);rect.Width=-3;rect.Height=-8;Console.WriteLine("寬={0},高={1},面積={2}",rect.Width,rect.Height,rect.Area);mmrect1=newmm(-10,-12);Console.WriteLine("寬={0},高={1},面積={2}",rect1.Width,rect1.Height,rect1.Area);Console.ReadKey();}}}C#程序設(shè)計工程教程staticvoidMain(str34C#程序設(shè)計工程教程步驟2 按【F5】鍵調(diào)試程序,運行效果如以下圖所示。C#程序設(shè)計工程教程步驟2 按【F5】鍵調(diào)試程序,運行效35C#程序設(shè)計

工程教程計算機“十二五〞規(guī)劃教材工程七C#程序設(shè)計

工程教程計算機“十二五〞規(guī)劃教材工程七C#程序設(shè)計工程教程工程七類與對象——抽象與實體的完美結(jié)合學(xué)習(xí)任務(wù)掌握類的聲明方法。掌握對象的創(chuàng)立和使用方法。掌握構(gòu)造函數(shù)和析構(gòu)函數(shù)的使用方法。掌握this關(guān)鍵字和屬性的使用方法。C#程序設(shè)計工程教程工程七類與對象——抽象與實體的完美37C#程序設(shè)計工程教程任務(wù)安排任務(wù)一初識類與對象

任務(wù)二

深入學(xué)習(xí)類的成員

工程七類與對象——抽象與實體的完美結(jié)合C#程序設(shè)計工程教程任務(wù)安排工程七類與對象——抽象與實38C#程序設(shè)計工程教程任務(wù)一初識類與對象任務(wù)說明預(yù)備知識在本任務(wù)中,將向讀者介紹類與對象的根本知識。一、聲明類類需要先聲明后使用,聲明類的語法結(jié)構(gòu)如下:[<修飾符>]class<類名>[:<基類名>]{//類成員}//無需分號聲明類時先指定類本身的修飾符,類的修飾符包括訪問修飾符〔internal、public、private和protected〕和其他功能修飾符〔new、abstract、sealed和partial〕,當(dāng)有兩種修飾符同時修飾類時,訪問修飾符排在功能修飾符前;然后是類的名稱、基類〔如果此類為繼承類〕;聲明頭后面是類體,類體由一對大括號組成,類體中包含C#的類成員。C#程序設(shè)計工程教程任務(wù)一初識類與對象任務(wù)說明預(yù)備知識在39C#程序設(shè)計工程教程各修飾符含義如下表所示:注意:abstract不能和new同時用,

類繼承時如果基類的可訪問性比派生類的可訪問性低,那么不可以繼承;abstract和sealed修飾符也是被禁止同時使用的。C#程序設(shè)計工程教程各修飾符含義如下表所示:注意:40C#程序設(shè)計工程教程下面我們先來簡單了解一下嵌套類、基類與派生類的概念?!惨弧城短最愒陬惢蚪Y(jié)構(gòu)內(nèi)聲明的類稱為嵌套類〔nested-type〕,在編譯單元或命名空間內(nèi)聲明的類為非嵌套類。usingSystem;classA{privateclassB{staticvoidF(){Console.WriteLine("......");}}}類B在類A中聲明,是嵌套類;類A在編譯單元內(nèi)聲明,是非嵌套類。C#程序設(shè)計工程教程下面我們先來簡單了解一下嵌套類、基類與派41C#程序設(shè)計工程教程〔二〕基類與派生類在定義類的時候,如果類n繼承自類m,那么將類m稱為類n的基類,類n那么是類m的派生類。例如,下面代碼中定義的MobilePhone類就是類Phone的派生類,類Phone是類MobilePhone的基類。publicclassMobilePhone:Phone{//類成員}每一個類只能指明一個基類,并且內(nèi)部類可以繼承一個公共類,但是公共類不能繼承一個內(nèi)部類。C#程序設(shè)計工程教程〔二〕基類與派生類在定義類的42C#程序設(shè)計工程教程二、類的成員創(chuàng)立一個C#類后,在類內(nèi)的所有元素都是這個類的成員,可以將其分為數(shù)據(jù)成員和函數(shù)成員兩類。〔一〕數(shù)據(jù)成員數(shù)據(jù)成員包括字段和常量兩種。1.字段在類內(nèi)定義的變量成員被稱之為字段。字段可以預(yù)先初始化聲明,聲明的字段將作用于整個類。classPhone{stringcompany="NOKIA"; //定義一個變量用于存儲品牌名稱floatprice=2021; //定義一個變量用于存儲價格}C#程序設(shè)計工程教程二、類的成員創(chuàng)立一個C#類43C#程序設(shè)計工程教程根據(jù)修飾符的不同,字段可以分為靜態(tài)字段、實例字段和只讀字段?!?〕靜態(tài)字段

用修飾符static聲明的字段稱為靜態(tài)字段,靜態(tài)字段屬于類而不屬于某個對象。引用靜態(tài)字段的方法為:類名.靜態(tài)字段名?!?〕實例字段未使用修飾符static的字段都可以稱為實例字段。每創(chuàng)立類的一個對象就會在對象內(nèi)創(chuàng)立一個該字段實例,創(chuàng)立它的對象被撤銷該實例字段也被撤銷。引用實例字段的方法為:實例名.實例字段名?!?〕只讀字段

使用readonly修飾符聲明的字段為只讀字段。只讀字段是特殊的實例字段,它只能在字段聲明或構(gòu)造函數(shù)中重新賦值,在其他任何地方都不能改變只讀字段的值。C#程序設(shè)計工程教程根據(jù)修飾符的不同,字段可以分為靜態(tài)字段、44C#程序設(shè)計工程教程2.常量用const修飾符聲明的字段為常量。常量只能在聲明中初始化,以后不能再修改。classMobilePhone{conststringcompany="NOKIA"; //定義一個常量用于存儲品牌名稱floatprice=1999; //定義一個變量用于存儲價格conststringmodel="N98"; //定義一個常量用于存儲型號}C#程序設(shè)計工程教程2.常量用const修飾符聲明的45C#程序設(shè)計工程教程來看一個綜合應(yīng)用數(shù)據(jù)成員的例子:publicclassTest{ publicconstintintMax=int.MaxValue; //常量,必須賦初值publicintx=0; //實例字段publicreadonlyinty=0; //只讀字段publicstaticintcnt=0; //靜態(tài)字段publicTest(intx1,inty1) //構(gòu)造函數(shù){//intMax=0; //錯誤,不能修改常量x=x1; //在構(gòu)造函數(shù)內(nèi)允許修改實例字段y=y1; //在構(gòu)造函數(shù)內(nèi)允許修改只讀字段cnt++;}//每創(chuàng)立一個對象都調(diào)用構(gòu)造函數(shù),用此語句可以記錄對象的個數(shù)publicvoidModify(intx1,inty1){//intMax=0; //錯誤,不能修改常量 x=x1; cnt=y1; //y=10; }} //不允許修改只讀字段C#程序設(shè)計工程教程來看一個綜合應(yīng)用數(shù)據(jù)成員的例子:publ46C#程序設(shè)計工程教程〔二〕函數(shù)成員C#類的函數(shù)成員主要包括方法、屬性、索引器、事件、運算符、構(gòu)造函數(shù)和析構(gòu)函數(shù)。classClass1{staticvoidMain(string[]args){ TestT1=newTest(100,200); T1.x=40; //引用實例字段方法:實例名.實例字段名 Testt=0; //引用靜態(tài)字段方法:類名.靜態(tài)字段名 intz=T1.y; //引用只讀字段 z=TMax; //引用常量}}C#程序設(shè)計工程教程〔二〕函數(shù)成員C#類的函數(shù)成47C#程序設(shè)計工程教程〔三〕類成員訪問修飾符所有類成員都具有可訪問性級別,可通過訪問修飾符來控制類成員的可訪問范圍,以實現(xiàn)數(shù)據(jù)和代碼的隱藏。C#定義了如下五種訪問修飾符,其含義如下表所示。C#程序設(shè)計工程教程〔三〕類成員訪問修飾符所有類48C#程序設(shè)計工程教程三、對象C#中的類是抽象的,如果要使用類來實現(xiàn)某項特定功能,必須要將類實例化,既創(chuàng)立類的對象。這里讀者可以將類理解為生產(chǎn)產(chǎn)品時用到的模具,而對象就是生產(chǎn)出來的產(chǎn)品。〔一〕創(chuàng)立對象在類中創(chuàng)立對象的格式如下:<對象名>=new<構(gòu)造方法名>([參數(shù)列表]);為Phone類創(chuàng)立一個對象Nokia,代碼如下:PhoneNokia=newPhone();在C#面向?qū)ο蟪绦蛟O(shè)計語言中,創(chuàng)立類的對象、創(chuàng)立類的實例和實例化類等說法含義相同,都是以類為模板生成一個類對象。在使用關(guān)鍵字new創(chuàng)立一個類的對象時,將為對象分配一塊內(nèi)存,每一個對象都有不同的內(nèi)存,因此,兩個不同的對象,即使他們的代碼都相同,也是單獨的兩個個體。C#程序設(shè)計工程教程三、對象C#中的類是抽象的,如49C#程序設(shè)計工程教程〔二〕使用對象在C#中,類對象使用點運算符“.〞來引用類中成員,并且引用的范圍受成員的訪問修飾符的限制。classclass1 //定義一個類class1{publicstringstr; //定義字符型公共變量strprotectedstringstr1; //定義字符型受保護變量str1privatestringstr2; //定義字符型私有變量str2internalstringstr3; //定義字符型內(nèi)部變量str3publicvoidway() //定義一個沒有任何返回類型的公共方法

way{……}}classclass2{publicstaticvoidMain(){class1dx=newclass1(); //創(chuàng)立一個class1的對象dxdx.str="a"; //此條語句正確,在程序內(nèi)能引用public成員//dx.str1="b"; //此條語句錯誤,在類外不能引用protected成員//dx.str2="c"; //此條語句錯誤,在類外不能引用private成員dx.str3="d"; //此條語句正確,在程序內(nèi)能引用internal成員dx.way(); //此條語句正確,在程序內(nèi)能引用public成員}}C#程序設(shè)計工程教程〔二〕使用對象在C#中,類對50C#程序設(shè)計工程教程任務(wù)實施——獲取品牌信息使用“類與對象〞的相關(guān)知識創(chuàng)立應(yīng)用程序,在程序中完成類的建模,并根據(jù)類生成新的對象,根據(jù)用戶輸入的品牌名稱,輸出相應(yīng)信息。任務(wù)說明實施步驟步驟1新建一個控制臺應(yīng)用程序,將其命名為Phone,在文件中輸入創(chuàng)立類與對象的代碼,如【代碼7-1】所示。C#程序設(shè)計工程教程任務(wù)實施——獲取品牌信息使51C#程序設(shè)計工程教程【代碼7-1】創(chuàng)立類與對象。namespacePhone{publicclass //創(chuàng)立一個“〞類{publicstring品牌;publicstring型號;publicstring顏色;publicdecimal價格;}class移動 //創(chuàng)立一個移動類{publicvoid1() //定義一個方法“1〞{1=new(); //創(chuàng)立一個新的對象“1〞1.品牌="NOKIA“;1.型號="N98";1.顏色="黑色“;1.價格=4999;Console.WriteLine("您選擇的信息如下:");Console.WriteLine("品牌:"+1.品牌);Console.WriteLine("型號:"+1.型號);Console.WriteLine("顏色:"+1.顏色);Console.WriteLine("價格:"+1.價格);Console.WriteLine("謝謝您的參與!");Console.ReadKey();}C#程序設(shè)計工程教程【代碼7-1】創(chuàng)立類與對象。52C#程序設(shè)計工程教程publicvoid2() //定義一個方法“2〞{2=new();//創(chuàng)立一個新的對象“2〞2.品牌="MOTO“;2.型號="MOTOME525";2.顏色="紅色“;2.價格=1989;Console.WriteLine("您選擇的信息如下:");Console.WriteLine("品牌:"+2.品牌);Console.WriteLine("品牌:"+2.型號);Console.WriteLine("型號:"+2.顏色);Console.WriteLine("顏色:"+2.價格);Console.WriteLine("謝謝您的參與!");Console.ReadKey();}publicvoid3() //定義一個方法“3〞{3=new();//創(chuàng)立一個新的對象“3〞3.品牌="聯(lián)想“;3.型號="聯(lián)想E268翻蓋";3.顏色="珍珠白“;3.價格=1399;Console.WriteLine("您選擇的信息如下:");Console.WriteLine("品牌:"+3.品牌);Console.WriteLine("型號:"+3.型號);Console.WriteLine("顏色:"+3.顏色);Console.WriteLine("價格:"+3.價格);Console.WriteLine("謝謝您的參與!");Console.ReadKey();}C#程序設(shè)計工程教程publicvoid2()53C#程序設(shè)計工程教程staticvoidMain(string[]args){Console.WriteLine("請輸入品牌名稱:NOKIA、MOTO、Lenovo");stringinput=Console.ReadLine();移動Mobile=new移動();switch(input){case"NOKIA":Mobile.1();break;case"MOTO":Mobile.2();break;case"Lenovo":Mobile.3();break;default:Console.WriteLine("請輸入正確的品牌名稱!");Console.ReadKey();break;}}}}C#程序設(shè)計工程教程staticvoidMain(st54C#程序設(shè)計工程教程步驟2按【F5】鍵,調(diào)試程序,得到如以下圖所示的運行結(jié)果。C#程序設(shè)計工程教程步驟2按【F5】鍵,調(diào)試程序,得到如55C#程序設(shè)計工程教程任務(wù)二深入學(xué)習(xí)類的成員任務(wù)說明本任務(wù)中將學(xué)習(xí)類中較難理解的一些概念。預(yù)備知識一、構(gòu)造函數(shù)〔一〕構(gòu)造函數(shù)的概念構(gòu)造函數(shù)具有與類相同的名稱,用于在創(chuàng)立對象時初始化對象。其聲明格式如下:class類名稱 //創(chuàng)立類{public類名稱([參數(shù)列表])//創(chuàng)立構(gòu)造函數(shù){……}}C#程序設(shè)計工程教程任務(wù)二深入學(xué)習(xí)類的成員任務(wù)說明本任務(wù)56C#程序設(shè)計工程教程每個類都有構(gòu)造函數(shù),即使我們沒有聲明它,編譯器也會自動為我們提供一個默認(rèn)的構(gòu)造函數(shù)。構(gòu)造函數(shù)與普通方法的不同之處在于:構(gòu)造函數(shù)的名稱必須和類名完全相同。構(gòu)造函數(shù)沒有返回值,也不能用void來修飾。構(gòu)造函數(shù)一般不能直接顯式調(diào)用,在創(chuàng)立對象時系統(tǒng)會自動調(diào)用。C#程序設(shè)計工程教程每個類都有構(gòu)造函數(shù),即使我們沒57C#程序設(shè)計工程教程〔二〕構(gòu)造函數(shù)的重載在C#中,一個類可以有多個構(gòu)造函數(shù),其重載方法與普通方法相同,用戶可以通過傳遞不同的參數(shù)來實現(xiàn)對不同類實例的初始化處理?!踩呈褂盟接袠?gòu)造函數(shù)如果將構(gòu)造函數(shù)聲明為private類型,那么說明此類不允許其他類〔除了嵌套類〕創(chuàng)立該類的實例,通常只用于含有靜態(tài)成員的類。〔四〕使用靜態(tài)構(gòu)造函數(shù)用關(guān)鍵字static聲明的構(gòu)造函數(shù)稱為靜態(tài)構(gòu)造函數(shù),當(dāng)用戶需要初始化一些靜態(tài)變量的時就需要使用靜態(tài)構(gòu)造函數(shù)。靜態(tài)構(gòu)造函數(shù)只會執(zhí)行一次,它是屬于類的,而不是只屬于某個實例。C#程序設(shè)計工程教程〔二〕構(gòu)造函數(shù)的重載在C#中,一58C#程序設(shè)計工程教程類中的靜態(tài)構(gòu)造函數(shù)具有以下特點:既沒有訪問修飾符,也沒有參數(shù)。在創(chuàng)立第一個實例或引用任何靜態(tài)成員之前,將自動調(diào)用靜態(tài)構(gòu)造函數(shù)來初始化類。用戶不能直接調(diào)用靜態(tài)構(gòu)造函數(shù)且無法控制何時執(zhí)行靜態(tài)構(gòu)造函數(shù)。一個類只能有一個靜態(tài)構(gòu)造函數(shù),但可以同時擁有靜態(tài)構(gòu)造函數(shù)和實例構(gòu)造函數(shù)。靜態(tài)構(gòu)造函數(shù)只能訪問類的靜態(tài)成員,不能訪問實例成員。C#程序設(shè)計工程教程類中的靜態(tài)構(gòu)造函數(shù)具有以下特點:既59C#程序設(shè)計工程教程二、析構(gòu)函數(shù)構(gòu)造函數(shù)的功能是在創(chuàng)立對象時將對象初始化。析構(gòu)函數(shù)與構(gòu)造函數(shù)的功能正好相反,它用來釋放一個對象所占用的內(nèi)存。析構(gòu)函數(shù)的名稱由類名前加上“~〞字符構(gòu)成,聲明格式如下:class類名{~類名()//聲明析構(gòu)函數(shù){......}}析構(gòu)函數(shù)具有以下幾個特征:

沒有返回值,沒有修飾符,也沒有參數(shù)一個類只能有一個析構(gòu)函數(shù)

不能繼承或重載析構(gòu)函數(shù)

不能顯式調(diào)用析構(gòu)函數(shù),它們是系統(tǒng)自動調(diào)用的C#程序設(shè)計工程教程二、析構(gòu)函數(shù)構(gòu)造函數(shù)的功能是在創(chuàng)60C#程序設(shè)計工程教程三、this關(guān)鍵字關(guān)鍵字this有兩種根本的用法:一是訪問當(dāng)前類成員,二是在聲明構(gòu)造函數(shù)時指定需要先執(zhí)行的構(gòu)造函數(shù)?!惨弧吃L問當(dāng)前類成員在使用this關(guān)鍵字訪問當(dāng)前類成員時要注意以下兩點:this是類中隱含的引用變量,它是被自動被賦值的,可以使用但不能被修改。類的靜態(tài)成員不是某個對象的一局部,因此,在靜態(tài)方法中引用this關(guān)鍵字是錯誤的。C#程序設(shè)計工程教程三、this關(guān)鍵字關(guān)鍵字this61C#程序設(shè)計工程教程〔二〕this用于構(gòu)造函數(shù)聲明在C#構(gòu)造函數(shù)中,可以使用如下的形式來聲明構(gòu)造函數(shù):<訪問修飾符>類名(形式參數(shù)表):this(實際參數(shù)表){//語句塊}其中this表示該類本身所聲明的、形式參數(shù)表與實際參數(shù)表最匹配的另一個實例構(gòu)造函數(shù),這個構(gòu)造函數(shù)會在執(zhí)行正在聲明的構(gòu)造函數(shù)之前執(zhí)行。C#程序設(shè)計工程教程〔二〕this用于構(gòu)造函數(shù)聲明在C#構(gòu)造62C#程序設(shè)計工程教程classM //定義M類{publicM(intn) //聲明一個關(guān)鍵字的構(gòu)造函數(shù){Console.WriteLine("M.M(intn)");}publicM(strings,intn):this(0) //聲明兩個關(guān)鍵字的構(gòu)造函數(shù){Console.WriteLine("M.M(strings,intn)");}}classTest //定義Test類{staticvoidMain(){Ma=newM("MClass",1); //定義實例對象aConsole.ReadKey();}}C#程序設(shè)計工程教程classM //定義M類63C#程序設(shè)計工程教程四、屬性為防止在對象不知道的情況下私有字段被更改,C#中提出了屬性的概念,其定義的形式為:訪問修飾符數(shù)據(jù)類型標(biāo)識符{//訪問器聲明;}訪問器有g(shù)et訪問器和set訪問器兩種,其聲明的格式如下:get{return要訪問的成員;}set{要設(shè)置值的成員=value;}value是C#的關(guān)鍵字,是進行屬性操作時set的隱含參數(shù)。C#程序設(shè)計工程教程四、屬性為防止在對象不知道的情64C#程序設(shè)計工程教程屬性提供了兩種訪問操作:get和set〔至少應(yīng)包括其中的一個〕。當(dāng)讀取屬性時,執(zhí)行g(shù)et訪問器的代碼塊;當(dāng)向?qū)傩苑峙湟粋€新值時,執(zhí)行set訪問器的代碼塊。不

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論