C#程序設(shè)計(jì)簡(jiǎn)明教程-第3章 面向?qū)ο蟪绦蛟O(shè)計(jì).ppt_第1頁(yè)
C#程序設(shè)計(jì)簡(jiǎn)明教程-第3章 面向?qū)ο蟪绦蛟O(shè)計(jì).ppt_第2頁(yè)
C#程序設(shè)計(jì)簡(jiǎn)明教程-第3章 面向?qū)ο蟪绦蛟O(shè)計(jì).ppt_第3頁(yè)
C#程序設(shè)計(jì)簡(jiǎn)明教程-第3章 面向?qū)ο蟪绦蛟O(shè)計(jì).ppt_第4頁(yè)
C#程序設(shè)計(jì)簡(jiǎn)明教程-第3章 面向?qū)ο蟪绦蛟O(shè)計(jì).ppt_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1,章節(jié)目錄,上一頁(yè),下一頁(yè),第3章 面向?qū)ο缶幊碳夹g(shù) 3.1 類和對(duì)象 3.1.1 類和對(duì)象概述 現(xiàn)實(shí)生活中的類是人們對(duì)客觀對(duì)象不斷認(rèn)識(shí)而產(chǎn)生的抽象的概念,而對(duì)象則是現(xiàn)實(shí)生活中的一個(gè)個(gè)實(shí)體。面向?qū)ο蟪绦蛟O(shè)計(jì)的類概念從本質(zhì)上和人們現(xiàn)實(shí)生活中的類概念是相同的。 類是一種數(shù)據(jù)類型,在C#中,類分為兩種:由系統(tǒng)提供的預(yù)先定義的,這些類在.NET框架類庫(kù)中;用戶定義數(shù)據(jù)類型。,2,章節(jié)目錄,上一頁(yè),下一頁(yè),類:即類型,由具體相同的東西抽象出來(lái)的 對(duì)象:從某一種類型中有具體值的個(gè)體,在該對(duì)象上有字段,屬性,事件及方法. 另外,類有封裝繼承多態(tài)等特性 在創(chuàng)建對(duì)象之前必須先定義該對(duì)象所屬的類。有了類型后,才

2、能由類型聲明相應(yīng)的對(duì)象(變量)。 在Visual Studio.NET集成環(huán)境中的,工具箱中的一個(gè)個(gè)控件,是被圖形文字化的可視的類,而把這些控件添加到窗體設(shè)計(jì)器中后,窗體設(shè)計(jì)器中的控件則是對(duì)象,即由工具箱中的類創(chuàng)建的對(duì)象.,3,1 類定義及數(shù)據(jù)成員定義 在類定義中需要使用關(guān)鍵字class,其簡(jiǎn)單的定義格式為: 類修飾符 class 類名 類體 “類名”是一個(gè)合法的C#標(biāo)識(shí)符,表示數(shù)據(jù)類型(類類型)名稱,“類體”以一對(duì)大括號(hào)開(kāi)始和結(jié)束。在一對(duì)大括號(hào)后面可以跟一個(gè)分號(hào),也可以省略分號(hào)。 類體中可以有數(shù)據(jù)成員,屬性,事件,方法等,4,章節(jié)目錄,上一頁(yè),下一頁(yè),例如: class Student /

3、類名為Student public string ID;/數(shù)據(jù)成員,字段 public string Name; public string Sex; 定義了一個(gè)名為“Student”(學(xué)生)的類,類體中包括學(xué)生的學(xué)號(hào)(“ID”)、姓名(“Name”)與性別(“Sex”)。,5,章節(jié)目錄,上一頁(yè),下一頁(yè),“類體”包括類中的所有數(shù)據(jù)及對(duì)數(shù)據(jù)的操作,這種機(jī)制叫“封裝”。 在“類體”中,所有的數(shù)據(jù)及對(duì)數(shù)據(jù)的操作的集合叫類成員,類成員的種類很多,本章僅介紹“字段”、“屬性”、“方法”與“構(gòu)造函數(shù)”。 “字段”是類定義中的數(shù)據(jù),也叫類的變量。在上例中定義的“ID”、“Name”與“Sex”等均為類中的字

4、段。如果需要在類定義的多個(gè)方法中使用某個(gè)變量,該變量應(yīng)該聲明為字段。,6,章節(jié)目錄,上一頁(yè),下一頁(yè),2.定義類中的方法 方法是把一些相關(guān)的語(yǔ)句組織在一起,用于解決某一特定問(wèn)題(尤其是一些字段處理)的語(yǔ)句塊。 方法必須放在類定義中。也就是說(shuō),方法必須是某一個(gè)類的方法。方法同樣遵循先聲明后使用的規(guī)則。 C#語(yǔ)言中的方法相當(dāng)于其他編程語(yǔ)言(如VB.NET)中的通用過(guò)程(Sub過(guò)程)或函數(shù)過(guò)程(Function過(guò)程)。,7,章節(jié)目錄,上一頁(yè),下一頁(yè),聲明方法最常用的語(yǔ)法格式為: 訪問(wèn)修飾符 返回類型 方法名(參數(shù)列表) 方法的訪問(wèn)修飾符通常是public,以保證在類定義外部能夠調(diào)用該方法。 方法的返回

5、類型用于指定由該方法計(jì)算和返回的值的類型,可以是任何值類型或引用類型數(shù)據(jù),如,int、string及前面定義的Student類。如果方法不返回一個(gè)值,則它的返回類型為void。 “方法”實(shí)質(zhì)上就是函數(shù),通常用于對(duì)字段進(jìn)行計(jì)算和操作,即對(duì)類中的數(shù)據(jù)進(jìn)行操作,以實(shí)現(xiàn)特定的功能。,8,章節(jié)目錄,上一頁(yè),下一頁(yè),方法名是一個(gè)合法的C#標(biāo)識(shí)符。 參數(shù)列表在一對(duì)圓括號(hào)中,指定調(diào)用該方法時(shí)需要使用的參數(shù)個(gè)數(shù)、各個(gè)參數(shù)的類型,參數(shù)之間以逗號(hào)分隔。 實(shí)現(xiàn)特定功能的語(yǔ)句塊放在一對(duì)大括號(hào)中,叫方法體,“”表示方法體的開(kāi)始,“”表示方法體的結(jié)束。 如果方法有返回值,則方法體中必須包含一個(gè)return語(yǔ)句,以指定返回值

6、,其類型必須和方法的返回類型相同。如果方法無(wú)返回值,在方法體中可以不包含return語(yǔ)句,或包含一個(gè)不指定任何值的return語(yǔ)句。,9,例3.1: class Vehicle/定義類 protected int wheels;/定義數(shù)據(jù)成員,字段 protected float weight; public void SetVehicle(int wheels, float weight)/定義方法 this.wheels = wheels; this.weight = weight; public void GetVehicle() MessageBox.Show(車輪數(shù): + this.

7、wheels.ToString() + n車重量: + this.weight.ToString(); ,10,3.定義類中的屬性 “屬性”用于讀取和寫(xiě)入“字段”值,“屬性”是字段的自然擴(kuò)展,對(duì)用戶而言,“屬性”等同于“字段”本身,對(duì)程序員而言,屬性是一種讀寫(xiě)“字段”的特殊方法。,11,格式如下: class 類名 字段定義; 訪問(wèn)修飾符 數(shù)據(jù)類型 屬性名 set . 字段名=value; get . return 字段名; 例3_2,12,章節(jié)目錄,上一頁(yè),下一頁(yè),4. 聲明與使用對(duì)象 (1). 聲明對(duì)象 聲明對(duì)象的格式與聲明基本數(shù)據(jù)類型的格式相同,其語(yǔ)法格式為: 類名 對(duì)象名; 例如:St

8、udent s1; / 聲明一個(gè)學(xué)生類對(duì)象s1 對(duì)象聲明后,需用“new”關(guān)鍵字將對(duì)象實(shí)例化,。實(shí)例化的語(yǔ)法格式: 對(duì)象名=new 類名( ); 例如:s1=new Student( ); / 為s1分配內(nèi)存,13,(2). 訪問(wèn)對(duì)象(成員) 訪問(wèn)對(duì)象實(shí)質(zhì)是訪問(wèn)對(duì)象成員,對(duì)對(duì)象變量成員的訪問(wèn)使用“.”運(yùn)算符。例如: 訪問(wèn)對(duì)象成員:s1.ID=2005001;s1.Name=張三; 訪問(wèn)對(duì)象方法:car1.SetVehicle(6,800) 訪問(wèn)對(duì)象屬性:s1.Sex=女; 可以使用對(duì)象變量為另一對(duì)象變量整體賦值,例如,“Student s2;s2=s1;”或“Student s2= s1;”(

9、這是引用類型)。 可以使用對(duì)象中的某一成員為變量賦值。例如: string sName=s1.Name; 例:33,14,章節(jié)目錄,上一頁(yè),下一頁(yè),例:class Student / 類名為Student private string name; / 聲明字段 public string Name / 對(duì)應(yīng)name的屬性 get return name; set name=value; ,15,章節(jié)目錄,上一頁(yè),下一頁(yè),聲明只讀或只寫(xiě)屬性 在屬性聲明中,如果只有g(shù)et訪問(wèn)器,則該屬性為只讀屬性。例如: public string Sex get return sex; ,16,章節(jié)目錄,上一頁(yè)

10、,下一頁(yè),5 構(gòu)造函數(shù) 構(gòu)造函數(shù)是一種特殊的方法成員,構(gòu)造函數(shù)的主要作用是在創(chuàng)建對(duì)象(聲明對(duì)象)時(shí)初始化對(duì)象。一個(gè)類定義必須且至少有一個(gè)構(gòu)造函數(shù),如果定義類時(shí),沒(méi)有聲明構(gòu)造函數(shù),系統(tǒng)會(huì)提供一個(gè)默認(rèn)的構(gòu)造函數(shù),如果聲明了構(gòu)造函數(shù),系統(tǒng)將不再提供默認(rèn)構(gòu)造函數(shù)。,17,章節(jié)目錄,上一頁(yè),下一頁(yè),(1) 聲明構(gòu)造函數(shù) 聲明構(gòu)造函數(shù)與聲明普通方法相比,有兩個(gè)特別要求,一是構(gòu)造函數(shù)不允許有返回類型包括void類型,二是構(gòu)造函數(shù)的名稱必須與類名相同。 所以構(gòu)造函數(shù)往往需要使用形參,例如創(chuàng)建一個(gè)學(xué)生類對(duì)象時(shí),需要給出學(xué)生的學(xué)號(hào)、姓名、性別及年齡等,所以學(xué)生類構(gòu)造函數(shù)可以聲明如下: public Student

11、(string ID,string nname,string ssex,int aage) id=ID; name=nname; sex=ssex; age=aage;,18,章節(jié)目錄,上一頁(yè),下一頁(yè),(2)構(gòu)造函數(shù)的調(diào)用 創(chuàng)建對(duì)象時(shí)自動(dòng)調(diào)用。 如果聲明了帶參數(shù)的構(gòu)造函數(shù),所以系統(tǒng)不再提供默認(rèn)構(gòu)造函數(shù),這樣在創(chuàng)建對(duì)象時(shí),必須按照聲明的構(gòu)造函數(shù)的參數(shù)要求給出實(shí)際參數(shù),否則將產(chǎn)生編譯錯(cuò)誤,例如: Student s1=new Student(“2005001”,“張三”,“女”,21); 由上述創(chuàng)建對(duì)象的語(yǔ)句可知,new關(guān)鍵字后面實(shí)際是對(duì)構(gòu)造函數(shù)的調(diào)用。,19,章節(jié)目錄,上一頁(yè),下一頁(yè),(3) 重

12、載構(gòu)造函數(shù) 一個(gè)類中可以有多個(gè)構(gòu)造函數(shù),調(diào)用時(shí)根據(jù)參數(shù)不同會(huì)自動(dòng)調(diào)用那一個(gè)構(gòu)造函數(shù)。 例如為學(xué)生類重載一個(gè)只初始化姓名的構(gòu)造函數(shù),代碼如下: public Student(string nname) name=nname; 如果在聲明了帶參數(shù)的構(gòu)造函數(shù)后,還想保留默認(rèn)構(gòu)造函數(shù),則必須顯式聲明一個(gè)默認(rèn)構(gòu)造函數(shù)。以Student類為例,聲明默認(rèn)構(gòu)造函數(shù)如下: public Student( ) / 顯式聲明默認(rèn)構(gòu)造函數(shù) 例:35,20,20,3.3 類的繼承,繼承是面向?qū)ο蟪绦蛟O(shè)計(jì)中實(shí)現(xiàn)代碼重用的重要機(jī)制之一,它起源于現(xiàn)實(shí)世界中事物之間的聯(lián)系。 基類(父類): 派生類: 類的繼承的基本格式與功能如

13、下。 格式: class 派生類類名:基類類名 /注與C+不同,少了繼承關(guān)鍵字 成員聲明列表; 注:C中的派生類中只能繼承一個(gè)類,派生類將繼承基類 除構(gòu)造函數(shù)和析構(gòu)函數(shù)外的其他所有成員。例3.6,21,21,3.4 多態(tài)性(重寫(xiě)),多態(tài)性是指同一操作作用于不同類的實(shí)例,這些類對(duì)它進(jìn)行不同的解釋,從而產(chǎn)生不同的執(zhí)行結(jié)果的現(xiàn)象。 在C#中有兩種多態(tài)性:編譯時(shí)的多態(tài)性和運(yùn)行時(shí)的多態(tài)性。 運(yùn)行時(shí)的多態(tài)性是通過(guò)繼承和虛成員來(lái)實(shí)現(xiàn)的。運(yùn)行時(shí)的多態(tài)性是指系統(tǒng)在編譯時(shí)不確定選用哪個(gè)重載方法,而是直到程序運(yùn)行時(shí),才根據(jù)實(shí)際情況決定采用哪個(gè)重載方法。 編譯時(shí)的多態(tài)性具有運(yùn)行速度快的特點(diǎn),而運(yùn)行時(shí)的多態(tài)性則具有極大

14、的靈活性。 例3_9,22,22,using System; class BaseClass /基類 public void NVMeth()/定義基類的非虛方法 Console.WriteLine(調(diào)用了基類BaseClass類的非虛方法NVMeth); public virtual void VMeth()/定義基類的虛方法 Console.WriteLine(調(diào)用了基類BaseClass類的虛方法NMeth); class InClass:BaseClass /定義派生類 new public void NVMeth()/定義派生類的非虛方法,用new關(guān)閉警告 Console.WriteLine(調(diào)用了派生類InClass類的非虛方法NVMeth); public override void VMeth()/定義派生類的虛方法,使用override進(jìn)行重載 Console.WriteLine(調(diào)用了派生類InClass類的虛方法NMeth); class Test public static void M

溫馨提示

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

評(píng)論

0/150

提交評(píng)論