第 03 章C#面向?qū)ο缶幊袒A(chǔ)_第1頁(yè)
第 03 章C#面向?qū)ο缶幊袒A(chǔ)_第2頁(yè)
第 03 章C#面向?qū)ο缶幊袒A(chǔ)_第3頁(yè)
第 03 章C#面向?qū)ο缶幊袒A(chǔ)_第4頁(yè)
第 03 章C#面向?qū)ο缶幊袒A(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩57頁(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、C#C#教程教程 3.1 3.1 創(chuàng)建創(chuàng)建WindowsWindows窗體應(yīng)用程序:計(jì)算圓面積實(shí)例窗體應(yīng)用程序:計(jì)算圓面積實(shí)例 3.2 3.2 類(lèi)和對(duì)象類(lèi)和對(duì)象 3.3 3.3 方法方法 3.4 3.4 屬性屬性 3.5 3.5 繼承和多態(tài)繼承和多態(tài) 3.6 3.6 綜合應(yīng)用綜合應(yīng)用 C#C#教程教程 【例例EX3_1EX3_1】設(shè)計(jì)計(jì)算圓的面積的設(shè)計(jì)計(jì)算圓的面積的WinFormWinForm應(yīng)用程序。應(yīng)用程序。 設(shè)計(jì)步驟如下: (1)新建WinForm項(xiàng)目 運(yùn)行VS2008,單擊菜單“文件”“新建”“項(xiàng)目”,彈出“新 建項(xiàng)目”對(duì)話框,選擇Visual C#的“Windows”項(xiàng)目類(lèi)型,選擇

2、“Windows窗體應(yīng)用程序”模板,項(xiàng)目命名為“EX3_1”,如圖3.1所示。 圖3.1 新建WinForm應(yīng)用程序項(xiàng)目 C#C#教程教程 (2)WinForm應(yīng)用程序開(kāi)發(fā)環(huán)境 單擊“確定”按鈕后,系統(tǒng)新建了一個(gè)名為“EX3_1”的WinForm項(xiàng) 目,并在項(xiàng)目中添加了一個(gè)窗體“Form1”,WinForm應(yīng)用程序開(kāi)發(fā)環(huán)境 如圖3.2所示。 圖3.2 WinForm應(yīng)用程序開(kāi)發(fā)環(huán)境 C#C#教程教程 (3)添加控件 在工具箱的“所有Windows窗體”中分別拖曳一個(gè)Button控件“ ”、 一個(gè)TextBox控件“ ”和一個(gè)Label控件“ ”到窗體“Form1”中。布局 各個(gè)控件的分布,布局

3、后的窗體如圖3.3所示。 圖3.3 布局控件 C#C#教程教程 (4)設(shè)置控件的屬性 打開(kāi)屬性窗口,單擊屬性窗口上面的下拉框,選擇“button1”, 將“Text”屬性設(shè)置為“計(jì)算”,如圖3.4所示。選擇“l(fā)abel1”,刪 除“Text”屬性值。選擇“Form1”,將“Text”設(shè)置為“計(jì)算圓的面 積”。其中“button1”和“l(fā)abel1”是控件的name屬性值。 選擇控件 圖3.4 設(shè)置屬性 C#C#教程教程 (5)添加代碼 雙擊Button控件,系統(tǒng)切換到“Form1.cs”代碼編輯器窗口,并且 添加了button1的Click事件和事件方法“button1_Click”。在此方法

4、中 添加代碼,代碼如下所示。 (6)執(zhí)行程序 按“Ctrl+F5”組合鍵執(zhí)行此程序。輸入圓的半徑“56”,單擊“計(jì) 算”按鈕,結(jié)果如圖3.5所示。如果要調(diào)試程序,可以設(shè)置斷點(diǎn)逐步調(diào)試 程序。 圖3.5 計(jì)算圓的面積 C#C#教程教程 3.2.1 3.2.1 面向?qū)ο缶幊堂嫦驅(qū)ο缶幊?1 1什么是面向?qū)ο缶幊淌裁词敲嫦驅(qū)ο缶幊?在面向?qū)ο笾?,算法與數(shù)據(jù)結(jié)構(gòu)被看做一個(gè)整體,稱做對(duì)象?,F(xiàn)實(shí) 世界中任何類(lèi)的對(duì)象都具有一定的屬性和操作,也總能用數(shù)據(jù)結(jié)構(gòu)與算 法兩者合一地來(lái)描述,所以可以用下面的等式來(lái)定義對(duì)象和程序: 對(duì)象=(算法+數(shù)據(jù)結(jié)構(gòu)) 程序=(對(duì)象+對(duì)象+) C#C#教程教程 2 2對(duì)象與類(lèi)對(duì)象與

5、類(lèi) 對(duì)象包含變量成員和方法類(lèi)型,它所包含的變量組成了存儲(chǔ)在對(duì)象 中的數(shù)據(jù),而其包含的方法可以訪問(wèn)對(duì)象的變量。例如,可以使用表示 打印機(jī)的對(duì)象,其中的方法可以控制打印機(jī)(允許打印文檔和測(cè)試頁(yè) 等)。 C#中的對(duì)象是從類(lèi)的定義實(shí)例化,這表示創(chuàng)建類(lèi)的一個(gè)實(shí)例,“類(lèi) 的實(shí)例”和對(duì)象表示相同的含義,但需要注意的是,“類(lèi)”和“對(duì)象” 是完全不同的概念。汽車(chē)類(lèi)指汽車(chē)的模板,或者指構(gòu)建汽車(chē)的規(guī)劃,而 汽車(chē)本身是這些規(guī)劃的實(shí)例,所以可以看做對(duì)象。 類(lèi)是對(duì)象概念在面向?qū)ο缶幊陶Z(yǔ)言中的反映,是相同對(duì)象的集合, 是一種數(shù)據(jù)結(jié)構(gòu),它可以包含數(shù)據(jù)成員(常量和域)、函數(shù)成員(方法、 屬性、事件、索引器、運(yùn)算符、實(shí)例構(gòu)造函數(shù)

6、、析構(gòu)函數(shù)和靜態(tài)構(gòu)造函 數(shù))和嵌套類(lèi)型。類(lèi)的類(lèi)型支持繼承,繼承是一種使派生類(lèi)可以對(duì)基類(lèi) 進(jìn)行擴(kuò)展和專(zhuān)用化的機(jī)制。 C#C#教程教程 3 3面向?qū)ο缶幊陶Z(yǔ)言的特點(diǎn)面向?qū)ο缶幊陶Z(yǔ)言的特點(diǎn) 面向?qū)ο蟮木幊谭绞骄哂欣^承性、封裝性和多態(tài)性等特點(diǎn)。 (1)繼承性:通過(guò)繼承可以創(chuàng)建子類(lèi)和父類(lèi)之間的層次關(guān)系,子 類(lèi)可以從其父類(lèi)中繼承屬性和方法,通過(guò)這種關(guān)系模型可以簡(jiǎn)化類(lèi)的操 作。假如已經(jīng)定義了A類(lèi),接下來(lái)準(zhǔn)備定義B類(lèi),而B(niǎo)類(lèi)中有很多屬性和 方法與A類(lèi)相同,那么就可以通過(guò)關(guān)鍵字extends實(shí)現(xiàn)B類(lèi)繼承A類(lèi),這樣 就無(wú)須再在B類(lèi)中定義A類(lèi)已具有的屬性和方法,在很大程度上提高了程 序的開(kāi)發(fā)效率。 例如,可以將汽車(chē)

7、看成一個(gè)父類(lèi),那么汽車(chē)類(lèi)具有位置、速度、顏 色等屬性,以及啟動(dòng)、停車(chē)、加速等操作。然后再定義一個(gè)卡車(chē)類(lèi)和一 個(gè)公共汽車(chē)類(lèi),它們繼承汽車(chē)類(lèi),具有汽車(chē)類(lèi)的屬性和方法,而卡車(chē)又 包括小型卡車(chē)和重型卡車(chē),公共汽車(chē)又包含單層公共汽車(chē)和雙層公共汽 車(chē)。 C#C#教程教程 汽車(chē)類(lèi)的繼承關(guān)系圖如圖3.6所示。代碼示例如下: class 汽車(chē)類(lèi)/在汽車(chē)類(lèi)中定義屬性和方法 class 卡車(chē)類(lèi):汽車(chē)類(lèi)/卡車(chē)類(lèi)中其他的屬性和方法 class 公共汽車(chē)類(lèi):汽車(chē)類(lèi)/公共汽車(chē)類(lèi)中其他的屬性和方法 class 小型卡車(chē)類(lèi):卡車(chē)類(lèi)/小型卡車(chē)類(lèi)中其他的屬性和方法 calss 重型卡車(chē)類(lèi):卡車(chē)類(lèi)/重型卡車(chē)類(lèi)中其他的屬性和方法 cl

8、ass 單層公共汽車(chē)類(lèi):公共汽車(chē)類(lèi)/單層公共汽車(chē)類(lèi)中其他的屬性和方法 class 雙層公共汽車(chē)類(lèi):公共汽車(chē)類(lèi)/雙層公共汽車(chē)類(lèi)中其他的屬性和方法 圖3.6 汽車(chē)類(lèi)的繼承關(guān)系圖 C#C#教程教程 (2)封裝性:類(lèi)是屬性和方法的集合,為了實(shí)現(xiàn)某項(xiàng)功能而定義 類(lèi)后,開(kāi)發(fā)人員并不需要了解類(lèi)體內(nèi)每句代碼的具體含義,只需通過(guò)對(duì) 象來(lái)調(diào)用類(lèi)內(nèi)某個(gè)屬性或方法即可實(shí)現(xiàn)某項(xiàng)功能,這就是類(lèi)的封裝性。 例如,在使用計(jì)算機(jī)時(shí),并不需要將計(jì)算機(jī)拆開(kāi)了解每個(gè)部件的具 體用處,用戶只需按下主機(jī)箱上的Power按鈕就可以啟動(dòng)計(jì)算機(jī),在鍵 盤(pán)上敲打就可以將文字輸入到計(jì)算機(jī)中,但計(jì)算機(jī)內(nèi)部的構(gòu)造用戶可能 根本不了解,這就是封裝的具體

9、表現(xiàn)。 (3)多態(tài)性:類(lèi)的多態(tài)性指不同的類(lèi)進(jìn)行同一操作可以有不同的 行為。例如,定義一個(gè)火車(chē)類(lèi)和一個(gè)汽車(chē)類(lèi),火車(chē)和汽車(chē)都可以移動(dòng), 說(shuō)明兩者在這方面可以進(jìn)行相同的操作,然而,火車(chē)和汽車(chē)移動(dòng)的行為 是截然不同的,因?yàn)榛疖?chē)必須在鐵軌上行駛,而汽車(chē)則在公路上行駛, 這就是類(lèi)多態(tài)性的形象比喻。 C#C#教程教程 1 1類(lèi)的聲明類(lèi)的聲明 要定義一個(gè)新的類(lèi),首先要聲明它。 語(yǔ)法形式: 屬性集信息 類(lèi)修飾符 class 類(lèi)名 : 類(lèi)基 類(lèi)成員 其中: 屬性集信息:C#語(yǔ)言提供給程序員的、為程序中定義的各種實(shí)體 附加的一些說(shuō)明信息,這是C#語(yǔ)言的一個(gè)重要特征。 類(lèi)修飾符:可以是表3.1所列的幾種之一或者它們的

10、有效組合,但 在類(lèi)聲明中,同一修飾符不允許出現(xiàn)多次。 類(lèi)基:它定義該類(lèi)的直接基類(lèi)和由該類(lèi)實(shí)現(xiàn)的接口。當(dāng)多于一項(xiàng) 時(shí),用逗號(hào)“,”分隔。如果沒(méi)有顯式地指定直接基類(lèi),那么它的基類(lèi)隱 含為object。 C#C#教程教程 修 飾 符 作 用 說(shuō) 明 public表示不限制對(duì)類(lèi)的訪問(wèn)。類(lèi)的訪問(wèn)權(quán)限省略時(shí)默認(rèn)為 public protected表示該類(lèi)只能被這個(gè)類(lèi)的成員或派生類(lèi)成員訪問(wèn) private表示該類(lèi)只能被這個(gè)類(lèi)的成員訪問(wèn) internal 表示該類(lèi)能夠由程序集中的所有文件使用,而不能由程序集之外的對(duì) 象使用 new只允許用在嵌套類(lèi)中,它表示所修飾的類(lèi)會(huì)隱藏繼承下來(lái)的同名成員 abstract

11、表示這是一個(gè)抽象類(lèi),該類(lèi)含有抽象成員,因此不能被實(shí)例化,只能 用做基類(lèi) sealed 表示這是一個(gè)密封類(lèi),不能從這個(gè)類(lèi)再派生出其他類(lèi)。顯然密封類(lèi)不 能同時(shí)為抽象類(lèi) 表3.1 類(lèi)修飾符 例如: class Point /Point類(lèi)的訪問(wèn)權(quán)限默認(rèn)為public int x, y;/類(lèi)的成員 C#C#教程教程 2 2類(lèi)的成員類(lèi)的成員 類(lèi)的定義包括類(lèi)頭和類(lèi)體兩部分,其中類(lèi)體用一對(duì)花括號(hào) 括起 來(lái),類(lèi)體用于定義該類(lèi)的成員。 語(yǔ)法形式: 類(lèi)成員聲明 類(lèi)成員由兩部分組成,一部分是以類(lèi)成員聲明形式引入的類(lèi)成員, 另一部分則是直接從它的基類(lèi)繼承而來(lái)的成員。 C#C#教程教程 (1)訪問(wèn)修飾符 類(lèi)成員聲明中可以

12、使用表3.2中的5種訪問(wèn)修飾符中的一種。當(dāng)類(lèi)成 員聲明不包含訪問(wèn)修飾符時(shí),默認(rèn)約定訪問(wèn)修飾符為private。 修 飾 符作 用 說(shuō) 明 public 同一程序集中的任何其他代碼或引用該程序集的其他程序集都可以訪 問(wèn)該類(lèi)型或成員 protected只有同一類(lèi)或結(jié)構(gòu)或者派生類(lèi)中的代碼可以訪問(wèn)該類(lèi)型或成員 private只有同一類(lèi)或結(jié)構(gòu)中的代碼可以訪問(wèn)該類(lèi)型或成員 internal 同一程序集中的任何代碼都可以訪問(wèn)該類(lèi)型或成員,但其他程序集中 的代碼不可以 p r o t e c t e d internal 同一程序集中的任何代碼或其他程序集中的任何派生類(lèi)都可以訪問(wèn)該 類(lèi)型或成員 表3.2 類(lèi)成

13、員訪問(wèn)修飾符 C#C#教程教程 (2)常數(shù)聲明 語(yǔ)法形式: 屬性集信息 常數(shù)修飾符 const 類(lèi)型 標(biāo)識(shí)符 = 常數(shù)表達(dá)式 , 其中: 常數(shù)修飾符:new、public、protected、internal、private。 類(lèi)型:sbyte、byte、short、ushort、int、uint、long、ulong、 char、float、double、decimal、bool、string、枚舉類(lèi)型或引用類(lèi)型。 常數(shù)表達(dá)式的值類(lèi)型應(yīng)與目標(biāo)類(lèi)型一致,或者通過(guò)隱式轉(zhuǎn)換規(guī)則轉(zhuǎn)換成目 標(biāo)類(lèi)型。 例如: class C_const/定義類(lèi)C_const public const int X=10;

14、/public修飾符 const double PI=3.14159; /默認(rèn)訪問(wèn)修飾符,即約定為private const double Y= 0.618+3.14; C#C#教程教程 【例例EX3_2EX3_2】新建一個(gè)名為新建一個(gè)名為“EX3_2EX3_2”的的WinFormWinForm項(xiàng)目,在此項(xiàng)目中新項(xiàng)目,在此項(xiàng)目中新 建一個(gè)類(lèi)并將訪問(wèn)類(lèi)中的常量顯示在窗體中。建一個(gè)類(lèi)并將訪問(wèn)類(lèi)中的常量顯示在窗體中。 設(shè)計(jì)步驟如下: 新建WinForm項(xiàng)目并且添加控件 按照【例EX3_1】中新建WinForm項(xiàng)目的方法新建一個(gè)名為“EX3_2” 的項(xiàng)目。從工具箱的“所有Windows窗體”中拖曳一個(gè)

15、“Button”控件和 一個(gè)“Label”控件到窗體上。 設(shè)置控件以及窗體的屬性 將“Button”控件的“Text”屬性設(shè)置為“讀取PI值”,刪除 “Label”控件的“Text”屬性值,將“Form1”的“Text”屬性設(shè)置為 “訪問(wèn)類(lèi)中常量”。 C#C#教程教程 添加代碼 雙擊Button控件,添加button1的Click事件代碼和類(lèi)Circle代碼, 代碼如下所示: /命名空間以省略號(hào)代替 namespace EX3_2 public partial class Form1 : Form public Form1() InitializeComponent(); private vo

16、id button1_Click(object sender, EventArgs e) /讀取圓周率 label1.Text = Circle.PI.ToString(); /通過(guò)Circle類(lèi)訪問(wèn)圓周率PI常量 class Circle /訪問(wèn)權(quán)限默認(rèn)為public public const double PI = 3.141592653589793; /public修飾符 C#C#教程教程 運(yùn)行程序 按“Ctrl+F5”組合鍵運(yùn)行程序,單擊“圓周率”按鈕,結(jié)果如圖 3.7所示。 圖3.7 讀取圓周率常量 C#C#教程教程 3 3創(chuàng)建類(lèi)的對(duì)象創(chuàng)建類(lèi)的對(duì)象 類(lèi)和對(duì)象是緊密結(jié)合的,類(lèi)是對(duì)象總體

17、上的定義,而對(duì)象是類(lèi)的具體 實(shí)現(xiàn)。創(chuàng)建類(lèi)對(duì)象時(shí)需要使用關(guān)鍵字new。 語(yǔ)法形式: 類(lèi)名 對(duì)象名=new 類(lèi)名();/類(lèi)名()是構(gòu)造函數(shù) 例如,在【例EX3_2】的“button1_Click”方法中創(chuàng)建類(lèi)Circle的一 個(gè)對(duì)象m: Circle m=new Circle();/創(chuàng)建了一個(gè)m對(duì)象 C#C#教程教程 1 1構(gòu)造函數(shù)構(gòu)造函數(shù) 當(dāng)定義了一個(gè)類(lèi)之后,就可以通過(guò)new運(yùn)算符將其實(shí)例化,產(chǎn)生一 個(gè)對(duì)象。為了能規(guī)范、安全地使用這個(gè)對(duì)象,C#提供了對(duì)對(duì)象進(jìn)行初始 化的方法,這就是構(gòu)造函數(shù)。 在C#中,類(lèi)的成員字段可以分為實(shí)例字段和靜態(tài)字段,與此相應(yīng)的 構(gòu)造函數(shù)也可以分為實(shí)例構(gòu)造函數(shù)和靜態(tài)構(gòu)造函

18、數(shù)。 (1)實(shí)例構(gòu)造函數(shù)的聲明 語(yǔ)法形式: 屬性集信息 構(gòu)造函數(shù)修飾符 標(biāo)識(shí)符 ( 參數(shù)列表 ) : base ( 參數(shù) 列表 ) : this ( 參數(shù)列表 ) 構(gòu)造函數(shù)語(yǔ)句塊 C#C#教程教程 其中: 構(gòu)造函數(shù)修飾符:public、protected、internal、private、 extern。一般地,構(gòu)造函數(shù)總是public類(lèi)型的。如果是private類(lèi)型的, 表明類(lèi)不能被外部類(lèi)實(shí)例化。 標(biāo)識(shí)符(參數(shù)列表):構(gòu)造函數(shù)名,必須與這個(gè)類(lèi)同名,不聲 明返回類(lèi)型,并且沒(méi)有任何返回值。它與返回值類(lèi)型為void的函數(shù)不同。 構(gòu)造函數(shù)可以沒(méi)有參數(shù),也可以有一個(gè)或多個(gè)。參數(shù)列表的一般格式如 下:參

19、數(shù)類(lèi)型參數(shù)名,參數(shù)類(lèi)型2 參數(shù)名2例如: class A int X,Y;/聲明int類(lèi)型字段 public A(int x)/帶有一個(gè)參數(shù)的構(gòu)造函數(shù) X=x; /給字段賦值 public A(int x,int y)/帶有兩個(gè)參數(shù)的構(gòu)造函數(shù) X=x; Y=y; C#C#教程教程 【例例EX3_3EX3_3】新建一個(gè)名為新建一個(gè)名為“EX3_3EX3_3”的的WinFormWinForm項(xiàng)目,在此項(xiàng)目中新項(xiàng)目,在此項(xiàng)目中新 建一個(gè)類(lèi)建一個(gè)類(lèi)“CircleCircle”并且添加構(gòu)造函數(shù)計(jì)算圓的面積。并且添加構(gòu)造函數(shù)計(jì)算圓的面積。 設(shè)計(jì)步驟如下: 新建WinForm項(xiàng)目并且添加控件 新建WinFo

20、rm項(xiàng)目并命名為“EX3_3”。從工具箱中拖曳一個(gè)“Button” 控件、一個(gè)“TextBox”控件和兩個(gè)“Label”控件到窗體上。 設(shè)置控件以及窗體的屬性 將“Button”控件的“Text”屬性設(shè)置為“計(jì)算”,刪除label2的 “Text”屬性值,將label1的“Text”屬性設(shè)置為“圓的半徑:”, “Form1”的“Text”屬性設(shè)置為“計(jì)算圓的面積”。 添加代碼 雙擊Button控件,添加button1的Click事件代碼和類(lèi)Circle代碼,代 碼如下所示。 C#C#教程教程 運(yùn)行程序 按“Ctrl+F5”組合鍵運(yùn)行程序,輸入圓的半徑,單擊“計(jì)算”按鈕, 結(jié)果如圖3.8所示。

21、圖3.8 例EX3_3運(yùn)行的結(jié)果 C#C#教程教程 (2)靜態(tài)構(gòu)造函數(shù)的聲明 語(yǔ)法形式: 屬性集信息 靜態(tài)構(gòu)造函數(shù)修飾符 標(biāo)識(shí)符() 靜態(tài)構(gòu)造函數(shù)體 其中: 靜態(tài)構(gòu)造函數(shù)修飾符: extern static 或者static extern 。如果有extern修飾符,則說(shuō)明這是一個(gè)外部靜態(tài)構(gòu)造函數(shù), 不提供任何實(shí)際的實(shí)現(xiàn),所以靜態(tài)構(gòu)造函數(shù)體僅僅是一個(gè)分號(hào)。 標(biāo)識(shí)符():是靜態(tài)構(gòu)造函數(shù)名,必須與這個(gè)類(lèi)同名,靜態(tài)構(gòu)造函 數(shù)不能有參數(shù)。 靜態(tài)構(gòu)造函數(shù)體:靜態(tài)構(gòu)造函數(shù)的目的是對(duì)靜態(tài)字段進(jìn)行初始化, 所以它只能對(duì)靜態(tài)數(shù)據(jù)成員進(jìn)行初始化,而不能對(duì)非靜態(tài)數(shù)據(jù)成員進(jìn)行 初始化。 C#C#教程教程 例如: cl

22、ass Student static string XH, XM, XB;/靜態(tài)字段,分別為學(xué)生的學(xué)號(hào),姓 名,性別 static int NL;/靜態(tài)字段表示學(xué)生年齡 static Student()/靜態(tài)構(gòu)造函數(shù),不能有參數(shù) /靜態(tài)構(gòu)造函數(shù),對(duì)類(lèi)的靜態(tài)字段進(jìn)行初始化 XH = 081101; XM = 王明; XB = 男; NL = 21; C#C#教程教程 2 2析構(gòu)函數(shù)析構(gòu)函數(shù) 語(yǔ)法形式: 屬性集信息 extern 標(biāo)識(shí)符 ( ) 析構(gòu)函數(shù)體 其中: 標(biāo)識(shí)符:必須與類(lèi)名相同,但為了區(qū)分構(gòu)造函數(shù),前面需加“”, 表明它是析構(gòu)函數(shù)。 析構(gòu)函數(shù):不能寫(xiě)返回類(lèi)型,也不能帶參數(shù),一個(gè)類(lèi)最多只能

23、有 一個(gè)析構(gòu)函數(shù)。 例如: class A int X; public A()/不帶參數(shù)的構(gòu)造函數(shù) X=10; A()/析構(gòu)函數(shù) C#C#教程教程 3.3.1 3.3.1 方法的聲明方法的聲明 方法是按照一定格式組織的一段程序代碼,在類(lèi)中用方法聲明的方 式來(lái)定義。 語(yǔ)法形式: 屬性集信息 方法修飾符 返回類(lèi)型 方法名(形參表) 方法體 C#C#教程教程 其中: 方法修飾符:如表3.3所示。方法修飾符中public、protected、 private、internal、protected internal屬于訪問(wèn)修飾符,表示訪問(wèn) 的級(jí)別。默認(rèn)情況下,方法的訪問(wèn)級(jí)別為public。 修 飾 符作

24、 用 說(shuō) 明 new在一個(gè)繼承結(jié)構(gòu)中,用于隱藏基類(lèi)同名的方法 public表示該方法可以在任何地方被訪問(wèn) protected表示該方法可以在它的類(lèi)體或派生類(lèi)類(lèi)體中被訪問(wèn),但不能在類(lèi)體外被訪問(wèn) private表示該方法只能在這個(gè)類(lèi)體內(nèi)被訪問(wèn) internal表示該方法可以被同處于一個(gè)工程的文件訪問(wèn) static表示該方法屬于類(lèi)型本身,而不屬于某特定對(duì)象 virtual表示該方法可在派生類(lèi)中重寫(xiě),來(lái)更改該方法的實(shí)現(xiàn) abstract 表示該方法僅定義了方法名及執(zhí)行方式,但沒(méi)有給出具體實(shí)現(xiàn),所以包含這 種方法的類(lèi)是抽象類(lèi),有待于派生類(lèi)的實(shí)現(xiàn) override表示該方法是將從基類(lèi)繼承的virtual方

25、法的新實(shí)現(xiàn) sealed 表示這是一個(gè)密封方法,它必須同時(shí)包含override修飾,以防止它的派生類(lèi)進(jìn) 一步重寫(xiě)該方法 extern表示該方法從外部實(shí)現(xiàn) 表3.3 方法修飾符 C#C#教程教程 返回類(lèi)型:方法可以返回值也可以不返回值。如果返回值,則需 要說(shuō)明返回值的類(lèi)型,它可以是任何一種C#的數(shù)據(jù)類(lèi)型,在方法體內(nèi)通 過(guò)return語(yǔ)句將數(shù)據(jù)交給調(diào)用者。如果方法不返回值,則它的返回類(lèi)型 可標(biāo)為void,默認(rèn)情況下為 void。 方法名:每個(gè)方法都有一個(gè)名稱,一般可以按標(biāo)識(shí)符的起名規(guī)則 隨意給定方法名,不過(guò)要記住Main()是為開(kāi)始執(zhí)行程序的方法預(yù)留的, 另外不要用C#的關(guān)鍵字作為方法名。為了使方

26、法容易理解和記憶,建議 方法的命名盡可能地同所要進(jìn)行的操作聯(lián)系起來(lái),這就是我們通常說(shuō)的 顧名思義。 形參表:由零個(gè)或多個(gè)用逗號(hào)分隔的形式參數(shù)組成,形式參數(shù)可 用屬性、參數(shù)修飾符、類(lèi)型等描述。當(dāng)形參表為空時(shí),外面的圓括號(hào)不 能省略。 方法體:用花括號(hào)括起來(lái)的一個(gè)語(yǔ)句塊。 C#C#教程教程 例如,假如有三門(mén)課程語(yǔ)文(YW)、英語(yǔ)(YY)、數(shù)學(xué)(SX),可 以在學(xué)生類(lèi)中添加計(jì)算學(xué)生的這三門(mén)課程的平均成績(jī)的方法,如下所示。 class Student /構(gòu)造函數(shù)等在這里以省略號(hào)代替 public int averageScore(int YW,int SX,int YY)/聲明計(jì)算平均 成績(jī)的方法 i

27、nt a = (YW + SX + YY)/3;/計(jì)算平均成績(jī)并賦值給變量a return a;/返回a值 C#C#教程教程 1 1值參數(shù)值參數(shù) 在方法聲明時(shí)不加修飾的形參就是值參數(shù),它表明實(shí)參與形參之間 按值傳遞。當(dāng)這個(gè)方法被調(diào)用時(shí),編譯器為值參數(shù)分配存儲(chǔ)單元,然后 將對(duì)應(yīng)的實(shí)參的值復(fù)制到形參中。實(shí)參可以是變量、常量、表達(dá)式,但 要求其值的類(lèi)型必須與形參聲明的類(lèi)型相同或能夠被隱式地轉(zhuǎn)化為這種 類(lèi)型。這種傳遞方式的好處是,在方法中對(duì)形參的修改不影響外部的實(shí) 參,也就是說(shuō),數(shù)據(jù)只能傳入方法而不能從方法傳出,所以值參數(shù)有時(shí) 也被稱為入?yún)?shù)。 2 2引用參數(shù)引用參數(shù) 如果調(diào)用一個(gè)方法,期望能夠?qū)鬟f

28、給它的實(shí)際變量進(jìn)行操作,用 C#默認(rèn)的按值傳遞是不可能實(shí)現(xiàn)的。所以C#用ref修飾符來(lái)解決此類(lèi)問(wèn) 題,它告訴編譯器,實(shí)參與形參的傳遞方式是引用。 引用參數(shù)與值參數(shù)不同,引用參數(shù)并不創(chuàng)建新的存儲(chǔ)單元,它與方 法調(diào)用中的實(shí)在參數(shù)變量同處一個(gè)存儲(chǔ)單元中。因此,在方法內(nèi)對(duì)形參 的修改就是對(duì)外部實(shí)參變量的修改。 C#C#教程教程 3 3輸出參數(shù)輸出參數(shù) 在參數(shù)前加out修飾符的被稱為輸出參數(shù),它與ref參數(shù)相似,只有 一點(diǎn)除外,就是它只能用于從方法中傳出值,而不能從方法調(diào)用處接收 實(shí)參數(shù)據(jù)。在方法內(nèi)out參數(shù)被認(rèn)為是未賦過(guò)值的,所以在方法結(jié)束之前 應(yīng)該對(duì)out參數(shù)賦值。 4 4參數(shù)數(shù)組參數(shù)數(shù)組 一般而言

29、,調(diào)用方法時(shí)其實(shí)參必須與該方法聲明的形參在類(lèi)型和數(shù) 量上相匹配,但有時(shí)我們更希望靈活一些,能夠給方法傳遞任意個(gè)數(shù)的 參數(shù)。比如,在3個(gè)數(shù)中找最大值、最小值和在5個(gè)數(shù)中找最大值、最小 值,甚至在任意多個(gè)數(shù)中找最大值、最小值能使用同一個(gè)方法。C#提供 了傳遞可變長(zhǎng)度參數(shù)表的機(jī)制,使用params關(guān)鍵字來(lái)指定一個(gè)可變長(zhǎng)的 參數(shù)表。 C#C#教程教程 【例例EX3_4EX3_4】新建一個(gè)名為新建一個(gè)名為“EX3_4EX3_4”的的WinFormWinForm項(xiàng)目,在此項(xiàng)目中定項(xiàng)目,在此項(xiàng)目中定 義一個(gè)類(lèi)義一個(gè)類(lèi)“SortSort”,在此類(lèi)中定義,在此類(lèi)中定義4 4種不同的方法并分別使用種不同的方法并分

30、別使用“值參數(shù)值參數(shù)”、 “引用參數(shù)引用參數(shù)”、“輸出參數(shù)輸出參數(shù)”和和“參數(shù)數(shù)組參數(shù)數(shù)組”參數(shù)傳遞形式實(shí)現(xiàn)查找最參數(shù)傳遞形式實(shí)現(xiàn)查找最 大值。大值。 設(shè)計(jì)步驟如下: (1)新建WinForm項(xiàng)目并添加控件 新建WinForm項(xiàng)目并命名為“EX3_4”。從工具箱中拖曳一個(gè) “Button”控件、一個(gè)“TextBox”控件和一個(gè)“Label”控件到窗體上。 (2)設(shè)置控件以及窗體的屬性 將“Button”控件的“Text”屬性設(shè)置為“查詢”,label1的 “Text”屬性設(shè)置為“單擊按鈕隨機(jī)生成0-100的3個(gè)數(shù)”,“Form1”的 “Text”屬性設(shè)置為“不同參數(shù)傳遞方式查詢最大值并查詢其中

31、最大 值”。將“TextBox”控件的“Multiline”屬性設(shè)置為“True”,允許 TextBox控件多行顯示。 (3)添加代碼 雙擊Button控件,添加button1的Click事件代碼和類(lèi)Sort代碼,代 碼如下所示。 C#C#教程教程 (4)運(yùn)行程序 按“Ctrl+F5”組合鍵運(yùn)行程序,單擊“查詢”按鈕隨機(jī)生成3個(gè)數(shù) 存放在數(shù)組“array”中,并調(diào)用不同的方法查詢其中最大的數(shù),結(jié)果如 圖3.9所示。 圖3.9 使用不同參數(shù)傳遞方式查詢最大值 C#C#教程教程 說(shuō)明:說(shuō)明: (1)此例和以下例子中,除非有特殊說(shuō)明,否則不列出命名空間。 (2)Random類(lèi)為隨機(jī)數(shù)生成器,能夠產(chǎn)生

32、滿足某些隨機(jī)性統(tǒng)計(jì)要求 的數(shù)字序列的類(lèi),其中“Random()”構(gòu)造函數(shù)使用與時(shí)間相關(guān)的默認(rèn)種 子值,初始化Random類(lèi)的新實(shí)例。Next方法的3種重載方法及說(shuō)明如表 3.4所示。 名 稱說(shuō) 明 Next()返回非負(fù)隨機(jī)數(shù) Next(Int32)返回一個(gè)小于所指定最大值的非負(fù)隨機(jī)數(shù) Next(Int32,Int32)返回一個(gè)指定范圍內(nèi)的隨機(jī)數(shù) 表3.4 Next方法的3種重載方法及說(shuō)明 (3)在C#中,可以使用字符串 rn 表示回車(chē)換行符。但推薦 使用Environment. NewLine(名稱空間為System),Environment是類(lèi), NewLine是字符串屬性,用于獲取當(dāng)前環(huán)境

33、中定義的回車(chē)換行符字符串。 上例中可以直接用“Environment.NewLine”替換掉“rn”。 (4)ToString()方法將相應(yīng)數(shù)據(jù)類(lèi)型的值轉(zhuǎn)換為字符串類(lèi)型。 C#C#教程教程 【例例EX3_5EX3_5】下面是一個(gè)簡(jiǎn)單的商品銷(xiāo)售管理器。輸入下面是一個(gè)簡(jiǎn)單的商品銷(xiāo)售管理器。輸入“原庫(kù)存原庫(kù)存 量量”、“產(chǎn)品單價(jià)產(chǎn)品單價(jià)”和和“銷(xiāo)售量銷(xiāo)售量”,計(jì)算出,計(jì)算出“現(xiàn)庫(kù)存量現(xiàn)庫(kù)存量”和和“銷(xiāo)售額銷(xiāo)售額”。 設(shè)計(jì)步驟如下: (1)新建WinForm項(xiàng)目并添加控件 新建WinForm項(xiàng)目并命名為“EX3_5”。從工具箱中拖曳2個(gè) “Button”控件、3個(gè)“TextBox”控件、2個(gè)“Grou

34、pBox”控件,圖標(biāo) “ ”和7個(gè)“Label”控件到窗體上。其中3個(gè)“Button”控件以及 label1、label2和label3放在groupBox1中,其余的“Label”控件放在 groupBox2中。 (2)設(shè)置控件以及窗體的屬性 將窗體“Form1”的“Text”屬性設(shè)置為“簡(jiǎn)單產(chǎn)品銷(xiāo)售管理器”, 控件與窗體的屬性設(shè)置如表3.5所示。 控 件 name屬 性 設(shè) 置 label1到label5 Text分別為“原庫(kù)存量:”、“產(chǎn)品單價(jià):”、“銷(xiāo)售量:”、“現(xiàn)庫(kù)存 量:”和“銷(xiāo)售額:” label6、label7Text為空值 groupBox1、groupBox2Text分別為

35、“輸入數(shù)據(jù)”和“計(jì)算結(jié)果” button1、button2Text屬性分別設(shè)置為“計(jì)算”和“清空” 表3.5 控件與窗體的屬性設(shè)置 C#C#教程教程 (3)添加代碼 分別雙擊button1和button2,添加button1、button2的Click事件 代碼和類(lèi)Sort代碼,代碼如下所示。 (4)運(yùn)行程序 按“Ctrl+F5”組合鍵運(yùn)行程序,輸入“原庫(kù)存量”、“產(chǎn)品單價(jià)” 和“銷(xiāo)售量”,單擊“計(jì)算”按鈕計(jì)算出現(xiàn)庫(kù)存量和銷(xiāo)售額,結(jié)果如圖 3.10所示。單擊“清空”按鈕清空窗體中的數(shù)據(jù)。 圖3.10 例EX3_5運(yùn)行的結(jié)果 C#C#教程教程 【例例EX3_6EX3_6】 設(shè)計(jì)一個(gè)設(shè)計(jì)一個(gè)Win

36、FormWinForm程序,利用方法的重載計(jì)算圖形程序,利用方法的重載計(jì)算圖形 “圓圓”、“矩形矩形”和和“三角形三角形”的面積。的面積。 設(shè)計(jì)思路如下: 根據(jù)界面所輸入的數(shù)值個(gè)數(shù)來(lái)判斷要計(jì)算圖形的種類(lèi),在輸入一個(gè) 數(shù)值的情況下,根據(jù)數(shù)值是否帶有“.”符號(hào)來(lái)判斷高精確計(jì)算還是低 精確計(jì)算圓的面積。 設(shè)計(jì)步驟如下: (1)新建WinForm項(xiàng)目并添加控件 新建WinForm項(xiàng)目并命名為“EX3_6”。從工具箱中拖曳2個(gè) “Button”控件和2個(gè)“GroupBox”控件,在groupBox1中添加4個(gè)Label 和4個(gè)TextBox控件。按如圖3.11所示布局控件。 圖3.11 界面的設(shè)計(jì) C#

37、C#教程教程 (2)設(shè)置屬性 將button1的“Text”屬性設(shè)置為“計(jì)算”,button2的“Text”屬 性設(shè)置為“清空”,groupBox1、groupBox2、label1、label2和label3 的“Text”屬性設(shè)置為“輸入數(shù)值”、“判斷以及計(jì)算結(jié)果”、“輸入 第1個(gè)數(shù)值:”、“輸入第2個(gè)數(shù)值:”和“輸入第3個(gè)數(shù)值:”, label4的“Text”屬性值的數(shù)值為空值。將Form1的“Text”屬性值設(shè) 置為“方法的重載”。 (3)添加事件及代碼 分別雙擊button1和button2,添加button1、button2的Click事件 代碼和類(lèi)CGraph代碼,代碼如下所示。

38、 C#C#教程教程 (4)運(yùn)行程序 按“Ctrl+F5”組合鍵運(yùn)行程序,輸入一個(gè)數(shù)值“65.89”,單擊 “計(jì)算”按鈕,計(jì)算結(jié)果如圖3.12所示。 圖3.12 利用方法的重載計(jì)算圖形面積 C#C#教程教程 說(shuō)明:說(shuō)明: (1)“Math”類(lèi)。為三角函數(shù)、對(duì)數(shù)函數(shù)和其他通用數(shù)學(xué)函數(shù)提供 常數(shù)和靜態(tài)方法。在“System”命名空間中,例中“Math.PI”是獲得圓 周率的,“Math.Sqrt”是計(jì)算平方根的。 (2)字符串類(lèi)型的“IndexOf”方法。報(bào)告String或一個(gè)或多個(gè)字 符在此字符串中的第一個(gè)匹配項(xiàng)的索引。常用的兩種重載方法如表3.6所 示。 方 法 名 稱說(shuō) 明 IndexOf(C

39、har)報(bào)告指定Unicode字符在此字符串中的第一個(gè)匹配項(xiàng)的索引 IndexOf(String)報(bào)告指定的String在此實(shí)例中的第一個(gè)匹配項(xiàng)的索引 表3.6 IndexOf方法 (3)“string.Empty”表示空字符串。此字段為只讀,值為零長(zhǎng) 度字符串“”。 (4)從上例可以看出,方法count是計(jì)算圖形面積的,類(lèi)CGraph中 有4個(gè)同名的方法count,它們或參數(shù)個(gè)數(shù)不一樣,或參數(shù)類(lèi)型不一樣。 在調(diào)用count方法時(shí),編譯器會(huì)根據(jù)調(diào)用時(shí)給出的實(shí)參個(gè)數(shù)及類(lèi)型調(diào)用 相應(yīng)的方法。 C#C#教程教程 C#提供了屬性(property)這個(gè)更好的方法,把字段域和訪問(wèn)它們的 方法相結(jié)合。對(duì)類(lèi)

40、的用戶而言,屬性值的讀和寫(xiě)與字段域語(yǔ)法相同;對(duì)編 譯器來(lái)說(shuō),屬性值的讀和寫(xiě)是通過(guò)類(lèi)中封裝的特別方法“get”訪問(wèn)器和 “set”訪問(wèn)器實(shí)現(xiàn)的。屬性的聲明方法如下。 語(yǔ)法形式: 屬性集信息 屬性修飾符 類(lèi)型 成員名 訪問(wèn)器聲明 C#C#教程教程 其中: 屬性修飾符:與方法修飾符相同,包括new、static、virtual、 abstract、override和4種訪問(wèn)修飾符的合法組合,它們遵循相同的規(guī) 則。 類(lèi)型:指定該聲明所引入的屬性的類(lèi)型。 成員名:指定該屬性的名稱。 訪問(wèn)器聲明:聲明屬性的訪問(wèn)器,可以是一個(gè)get訪問(wèn)器或一個(gè) set訪問(wèn)器,或者兩個(gè)都有。 語(yǔ)法形式: get /讀訪問(wèn)器

41、/訪問(wèn)器語(yǔ)句塊 set /寫(xiě)訪問(wèn)器 /訪問(wèn)器語(yǔ)句塊 C#C#教程教程 【例例EX3_7EX3_7】設(shè)計(jì)一個(gè)設(shè)計(jì)一個(gè)WinFormWinForm程序,在其中添加一個(gè)學(xué)生類(lèi)程序,在其中添加一個(gè)學(xué)生類(lèi) StudentStudent,學(xué)生類(lèi)中包含,學(xué)生類(lèi)中包含 “ “學(xué)號(hào)學(xué)號(hào)”、“姓名姓名”和和“年齡年齡”屬性,當(dāng)單屬性,當(dāng)單 擊窗體中的擊窗體中的“添加添加”按鈕時(shí),實(shí)例化學(xué)生類(lèi)后設(shè)置學(xué)生屬性值并將學(xué)按鈕時(shí),實(shí)例化學(xué)生類(lèi)后設(shè)置學(xué)生屬性值并將學(xué) 生信息顯示在窗體中,如圖生信息顯示在窗體中,如圖3.133.13所示。所示。 圖3.13 屬性的應(yīng)用 C#C#教程教程 設(shè)計(jì)步驟如下: (1)新建WinForm

42、項(xiàng)目并添加控件 新建WinForm項(xiàng)目并命名為“EX3_7”。從工具箱中拖曳1個(gè) “Button”控件、3個(gè)“Label”控件和4個(gè)“TextBox”控件到窗體 “Form1”中。 (2)設(shè)置屬性 將label1、label2、label3和button1的“Text”屬性分別設(shè)置為 “學(xué)號(hào):”、“姓名:”、“年齡:”和“添加”,F(xiàn)orm1的“Text” 屬性設(shè)置為“屬性”,TextBox4的“Multiline”和“ScrollBars”分 別設(shè)置為“True”和“Both”。布局控件如圖3.13所示。 (3)添加事件及代碼 在窗體設(shè)計(jì)器中雙擊button1控件,系統(tǒng)添加了“button1_

43、Click” 方法,添加代碼,代碼如下所示。 (4)運(yùn)行程序 按“Ctrl+F5”組合鍵運(yùn)行此程序。分別輸入學(xué)生的“學(xué)號(hào)”、 “姓名”和“年齡”,單擊“添加”按鈕,運(yùn)行結(jié)果如圖3.13所示。 C#C#教程教程 3.5.1 3.5.1 繼承繼承 繼承不但可以使用現(xiàn)有類(lèi)的所有功能,還可以對(duì)這些功能進(jìn)行擴(kuò)展。 繼承產(chǎn)生的類(lèi)稱為派生類(lèi)或子類(lèi),而被繼承的類(lèi)則稱為基類(lèi)、超類(lèi)或父 類(lèi)。客觀世界中的許多事物之間往往都具有相同的特征,具有繼承的特 點(diǎn)。圖3.14和圖3.15是采用類(lèi)的層次圖表示各種圖形繼承關(guān)系的例子。 圖3.14 類(lèi)的層次結(jié)構(gòu)示例a 圖3.15 類(lèi)的層次結(jié)構(gòu)示例b C#C#教程教程 1繼承的實(shí)現(xiàn)

44、繼承的實(shí)現(xiàn) 語(yǔ)法形式: 屬性集信息 類(lèi)修飾符 class 派生類(lèi):基類(lèi) 派生類(lèi)成員 C#C#教程教程 其中:屬性集信息、類(lèi)修飾符的使用參見(jiàn)類(lèi)的聲明。 例如: public class Shape /定義圖形類(lèi)Shape protected string Color; public Shape()/無(wú)參構(gòu)造函數(shù) public Shape(string Color) /構(gòu)造函數(shù) this.Color = Color; public class Circle : Shape /定義圓類(lèi)Circle,從Shape類(lèi)中派生 private double Radius; public Circle(str

45、ing Color, double Radius) this.Color = Color;/圓的顏色 this.Radius = Radius;/圓的半徑 C#C#教程教程 2 2basebase關(guān)鍵字關(guān)鍵字 實(shí)際上,上例中Circle調(diào)用的是父類(lèi)(Shape)的無(wú)參構(gòu)造函數(shù),而 不是有參構(gòu)造函數(shù),它等同于: public class Circle : Shape /定義圓類(lèi)Circle,從Shape類(lèi)中派生 private double Radius; public Circle(string Color, double Radius):base() this.Color = Color;

46、this.Radius = Radius; C#C#教程教程 上例程序中的Circle類(lèi)也可以改寫(xiě)成: public class Circle: Shape private double Radius; public Circle(string Color,double Radius):base(Color) this.Color = Color; this.Radius = Radius; C#C#教程教程 3 3System.ObjectSystem.Object類(lèi)類(lèi) C#所有類(lèi)都派生于System.Object類(lèi)。在定義類(lèi)時(shí)如果沒(méi)有指定派 生于哪一個(gè)類(lèi),系統(tǒng)就默認(rèn)其派生于Object類(lèi)。

47、上例中Shape的定義就 等同于: public class Shape :System.Object /TODO System.Object類(lèi)常見(jiàn)的公有方法是: (1)Equals:當(dāng)兩個(gè)對(duì)象具有相同值時(shí),方法將返回true。 (2)GetHashCode:方法返回對(duì)象值的散列碼。 (3)ToString:通過(guò)在派生類(lèi)中重寫(xiě)該方法,返回一個(gè)表示對(duì)象 狀態(tài)的字符串。 (4)GetType:根據(jù)內(nèi)置對(duì)象類(lèi)型指針獲得當(dāng)前對(duì)象的實(shí)際類(lèi)型。 C#C#教程教程 【例例EX3_8EX3_8】設(shè)計(jì)一個(gè)設(shè)計(jì)一個(gè)WinFormWinForm程序,體現(xiàn)類(lèi)的繼承性應(yīng)用。程序,體現(xiàn)類(lèi)的繼承性應(yīng)用。 設(shè)計(jì)步驟如下: (

48、1)新建WinForm項(xiàng)目并添加控件 新建一個(gè)WinForm項(xiàng)目并命名為“EX3_8”。從工具箱中拖曳1個(gè) “Button”控件、2個(gè)“Label”控件、3個(gè)“GroupBox”控件和4個(gè) “TextBox”控件到窗體“Form1”中。 (2)設(shè)置屬性 將label1、label2、groupBox1、groupBox2、groupBox3和button1 的“Text”屬性分別設(shè)置為“值1:”、“值2:”、“顏色”、“數(shù) 值”、“結(jié)果”和“計(jì)算”,F(xiàn)orm1的“Text”屬性設(shè)置為“繼承”, TextBox4的“Multiline”和“ScrollBars”分別設(shè)置為“True”和 “Bot

49、h”,布局控件如圖3.16所示。 (3)添加事件及代碼 在窗體設(shè)計(jì)器中雙擊button1控件,系統(tǒng)添加了“button1_Click” 方法,添加代碼,代碼如下所示。 C#C#教程教程 (4)運(yùn)行程序 按“Ctrl+F5”組合鍵運(yùn)行此程序。分別輸入學(xué)生的圖形的顏色和數(shù) 值,單擊“計(jì)算”按鈕,結(jié)果如圖3.16所示。 圖3.16 例EX3_8運(yùn)行的結(jié)果 C#C#教程教程 1 1虛方法的重載虛方法的重載 在類(lèi)的方法前加上關(guān)鍵字virtual,則該方法被稱為虛方法。通過(guò)對(duì) 虛方法的重載,實(shí)現(xiàn)在程序運(yùn)行過(guò)程中確定調(diào)用的方法。需要注意的是, 這里所講的重載與前面所講的通過(guò)參數(shù)類(lèi)型與參數(shù)個(gè)數(shù)的不同實(shí)現(xiàn)的重

50、載含義是不同的。 例如,在【例EX3_8】中計(jì)算圓形的面積用了方法GetArea,也可以 通過(guò)虛方法實(shí)現(xiàn)。在Shape中增加虛方法: public virtual double GetArea () return 0.0; 在Circle類(lèi)中對(duì)虛方法重載: public override double GetArea () return System.Math.PI * radius * radius; C#C#教程教程 2抽象類(lèi)和抽象方法抽象類(lèi)和抽象方法 抽象類(lèi)是一種特殊的基類(lèi),并不與具體的事物相聯(lián)系。抽象類(lèi)的定 義使用關(guān)鍵字abstract。在圖3.14類(lèi)的層次結(jié)構(gòu)中,并沒(méi)有“圖形”這種 具體的事物,所以將“圖形”定義為抽象類(lèi),派生了“圓形”和“矩形” 這樣一些可以產(chǎn)生具體實(shí)例化的普通類(lèi)。需要注意的是,抽象類(lèi)不能被 實(shí)例化,它只能作為其他類(lèi)的基類(lèi)。將Shape類(lèi)定義為抽象類(lèi): public abstract class Shape /定義抽象類(lèi)Shape /TODO 抽象方法

溫馨提示

  • 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)論