《C#語言程序設(shè)計(jì)項(xiàng)目教程》第7章 面向?qū)ο缶幊虒懽肿痔鸰第1頁
《C#語言程序設(shè)計(jì)項(xiàng)目教程》第7章 面向?qū)ο缶幊虒懽肿痔鸰第2頁
《C#語言程序設(shè)計(jì)項(xiàng)目教程》第7章 面向?qū)ο缶幊虒懽肿痔鸰第3頁
《C#語言程序設(shè)計(jì)項(xiàng)目教程》第7章 面向?qū)ο缶幊虒懽肿痔鸰第4頁
《C#語言程序設(shè)計(jì)項(xiàng)目教程》第7章 面向?qū)ο缶幊虒懽肿痔鸰第5頁
已閱讀5頁,還剩86頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第7章面向?qū)ο缶幊瘫菊聦?dǎo)讀:本章的主要內(nèi)容是學(xué)習(xí)面向?qū)ο缶幊碳夹g(shù)。然后通過項(xiàng)目“學(xué)生信息表”為導(dǎo)向,九個(gè)任務(wù)(定義一個(gè)簡單學(xué)生類、為學(xué)生類添加構(gòu)造函數(shù)和析構(gòu)函數(shù)、為學(xué)生類創(chuàng)建3個(gè)對(duì)象、為學(xué)生類添加一個(gè)方法顯示學(xué)生信息和學(xué)生狀態(tài)、修改學(xué)生類,利用方法訪問字段等)為驅(qū)動(dòng),學(xué)習(xí)類和對(duì)象、接口等知識(shí),本項(xiàng)目中將學(xué)習(xí)面向?qū)ο蟪绦蛟O(shè)計(jì)中的基本概念知識(shí)和高級(jí)技術(shù)。第7章面向?qū)ο缶幊?/p>

——任務(wù)一定義一個(gè)簡單學(xué)生類

一、任務(wù)描述:定義一個(gè)學(xué)生類。包含學(xué)生的姓名、出生日期、年齡等字段。姓名:張三出生日期:1992年2月14日年齡:12歲二、知識(shí)準(zhǔn)備:1類的概念2類的聲明二、知識(shí)準(zhǔn)備:1、類的概念類與對(duì)象這兩個(gè)概念是在面向?qū)ο蟪绦蛟O(shè)計(jì)的基本。類是現(xiàn)實(shí)世界或思維世界中的實(shí)體在計(jì)算機(jī)中的反映,它將數(shù)據(jù)以及這些數(shù)據(jù)上的操作封裝在一起。類是對(duì)象的抽象,而對(duì)象是類的具體實(shí)例。類是抽象的,不占用內(nèi)存,而對(duì)象是具體的,占用存儲(chǔ)空間。類是用于創(chuàng)建對(duì)象的藍(lán)圖,它是一個(gè)定義包括在特定類型的對(duì)象中的方法和變量的軟件模板。二、知識(shí)準(zhǔn)備:例如:如果汽車是一個(gè)類,那么大眾高爾夫、長安福特等就是對(duì)象。汽車的品牌、型號(hào)、顏色等就是汽車類的屬性,汽車的制造、上色、啟動(dòng)、剎車、停車等就是汽車類的方法。特種車也可以看做一個(gè)類,特種車擁有汽車類的所以屬性和方法,但是他還有自己特別的用途,比如它是防彈的,那么我們就可以說特種車類繼承了汽車類。開放人員在進(jìn)行類的定義時(shí),既包括類的屬性,也包括類的方法。1、類的概念二、知識(shí)準(zhǔn)備:在C#中,使用class關(guān)鍵字來聲明類:語法如下:下面介紹幾個(gè)常用的類修飾符:public:不能限制對(duì)類的訪問private:只有.NET中的應(yīng)用程序或庫才能訪問。protected:只能從所在類和所在類的子類進(jìn)行訪問。2、類的聲明類修飾符class類名{//類體}三、任務(wù)分析:2、如何在項(xiàng)目中添加類。單擊【SolutionExploer】,選中項(xiàng)目名稱,單擊右鍵選擇【Add】|【Class】,在彈出來的對(duì)話框中輸入類的名稱,單擊【OK】,即可在項(xiàng)目中添加一個(gè)新類。序號(hào)變量名稱變量類型變量作用1namestring學(xué)生的姓名2birthdaystring學(xué)生的出生日期3ageint學(xué)生的年齡1、定義學(xué)生類需要以下字段,如下表所示:學(xué)生類字段聲明說明表四、任務(wù)實(shí)施:1、啟動(dòng)VisualStudio2010,建立名為“stuclass”的控制臺(tái)應(yīng)用程序。2、聲明一個(gè)學(xué)生類Student,為學(xué)生類添加3個(gè)字段:classStudent{publicstringname;//姓名

publicstringbirthday;//出生日期

publicintage;//年齡

}五、任務(wù)小結(jié):1、字段就是程序開發(fā)中常見的變量或常量,是類的一個(gè)構(gòu)成部分,像任務(wù)中的name、birthday和age就是字段。2、聲明類的字段時(shí),要對(duì)字段添加訪問權(quán)限修飾符,屬性訪問權(quán)限為public表明該屬性可以直接訪問。第7章面向?qū)ο缶幊?/p>

——任務(wù)二為學(xué)生類添加構(gòu)造函數(shù)和析構(gòu)函數(shù)

一、任務(wù)描述:1、添加構(gòu)造函數(shù)。為學(xué)生類添加1個(gè)不帶參數(shù)的構(gòu)造函數(shù),為對(duì)象進(jìn)行默認(rèn)初始化。為學(xué)生類添加1個(gè)帶參數(shù)的構(gòu)造函數(shù),通過構(gòu)造函數(shù)的參數(shù)對(duì)對(duì)象進(jìn)行初始化。2、添加析構(gòu)函數(shù)為學(xué)生類添加1個(gè)析構(gòu)函數(shù),輸出1句話表明析構(gòu)函數(shù)被自動(dòng)調(diào)用。1二、知識(shí)準(zhǔn)備:構(gòu)造函數(shù)和析構(gòu)函數(shù)二、知識(shí)準(zhǔn)備:1、構(gòu)造函數(shù)和析構(gòu)函數(shù)析構(gòu)函數(shù)和構(gòu)造函數(shù)是類中兩個(gè)比較特殊的函數(shù),主要用來對(duì)對(duì)象進(jìn)行初始化和回收對(duì)象資源。在對(duì)象被創(chuàng)建時(shí),自動(dòng)調(diào)用構(gòu)造函數(shù),當(dāng)對(duì)象被銷毀時(shí),自動(dòng)調(diào)用析構(gòu)函數(shù),自動(dòng)釋放這個(gè)對(duì)象所占用的內(nèi)存空間。二、知識(shí)準(zhǔn)備:(1)構(gòu)造函數(shù)1、構(gòu)造函數(shù)和析構(gòu)函數(shù)(2)析構(gòu)函數(shù)構(gòu)造函數(shù)是在創(chuàng)建對(duì)象時(shí)自動(dòng)調(diào)用的類方法,該函數(shù)的函數(shù)名與類名相同,通常用作對(duì)對(duì)象進(jìn)行初始化,一般用public來修飾構(gòu)造函數(shù)。析構(gòu)函數(shù)的函數(shù)名與類名相同,只是前面多了一個(gè)~符號(hào),以此通構(gòu)造函數(shù)做區(qū)分。.NET類庫有垃圾回收功能,當(dāng)某個(gè)類的實(shí)例被認(rèn)為不再有效,.NET類庫的垃圾回收功能就會(huì)自動(dòng)調(diào)用析構(gòu)函數(shù)實(shí)現(xiàn)垃圾回收。一般情況下不建議定義析構(gòu)函數(shù),因?yàn)镃#中無用的對(duì)象會(huì)由垃圾收集器回收。三、任務(wù)分析:為學(xué)生類添加1個(gè)不帶參數(shù)的構(gòu)造函數(shù),為對(duì)象進(jìn)行默認(rèn)初始化。1、添加構(gòu)造函數(shù)publicStudent(){name="無名氏";birthday="1990年1月1日";age=23;}為學(xué)生類添加1個(gè)帶參數(shù)的構(gòu)造函數(shù),通過構(gòu)造函數(shù)的參數(shù)對(duì)對(duì)象進(jìn)行初始化。publicStudent(stringxm,stringsr,intnl){

name=xm;

sr=birthday;

nl=age;

}注意對(duì)比三、任務(wù)分析:2、添加析構(gòu)函數(shù)~Student(){Console.WriteLine("學(xué)生:"+name+"信息刪除!");Console.ReadLine();}四、任務(wù)實(shí)施:1、打開任務(wù)一中建立的stuclass控制臺(tái)應(yīng)用程序。2、在學(xué)生類Student中,為學(xué)生類添加構(gòu)造函數(shù)和析構(gòu)函數(shù):

classStudent{//變量定義,字段

publicstringname;//姓名

publicstringbirthday;//出生日期

publicintage;//年齡//構(gòu)造函數(shù)和析構(gòu)函數(shù)publicStudent(){name="無名氏";birthday="1990年1月1日";age=23;}四、任務(wù)實(shí)施:

publicStudent(stringxm,stringsr,intnl){name=xm;sr=birthday;nl=age;}~Student(){Console.WriteLine("學(xué)生:"+name+"信息刪除!");Console.ReadLine();}}五、任務(wù)小結(jié):1、構(gòu)造函數(shù)在定義時(shí),通常使用public修飾符。2、析構(gòu)函數(shù)一般不需要定義,這里只是為了示范析構(gòu)函數(shù)的作用。第7章面向?qū)ο缶幊?/p>

——任務(wù)三為學(xué)生類創(chuàng)建3個(gè)對(duì)象

一、任務(wù)描述:為學(xué)生類創(chuàng)建3個(gè)對(duì)象:對(duì)象stu1通過直接對(duì)其字段賦值來進(jìn)行初始化。對(duì)象stu2通過不帶參數(shù)的構(gòu)造函數(shù)進(jìn)行初始化。對(duì)象stu3通過帶參數(shù)的構(gòu)造函數(shù)進(jìn)行初始化。二、任務(wù)準(zhǔn)備:1、對(duì)象的聲明和初始化對(duì)象是面向?qū)ο髴?yīng)用程序的一個(gè)重要組成部分,是具有數(shù)據(jù)、行為和標(biāo)識(shí)的編程結(jié)構(gòu)。對(duì)象包含變量成員和方法類型,所包含的變量組成了存儲(chǔ)在對(duì)象中的數(shù)據(jù),其包含的方法可以訪問對(duì)象的變量。對(duì)象是把類進(jìn)行實(shí)例化。類的實(shí)例和對(duì)象表示同樣的含義。但是“類”和“對(duì)象”是兩個(gè)不同的概念。四、任務(wù)實(shí)施:1、打開任務(wù)二中建立的stuclass控制臺(tái)應(yīng)用程序。2、定義3個(gè)對(duì)象在Program.cs文件中的staticvoidMain(string[]args){}

方法中定義3個(gè)對(duì)象。四、任務(wù)實(shí)施:①對(duì)象stu1通過直接對(duì)其字段賦值來進(jìn)行初始化。②對(duì)象stu2通過不帶參數(shù)的構(gòu)造函數(shù)進(jìn)行初始化。③對(duì)象stu3通過帶參數(shù)的構(gòu)造函數(shù)進(jìn)行初始化。

Studentstu1=newStudent();

="李雷";stu1.birthday="1992年5月1日";stu1.age=21;Studentstu2=newStudent();Studentstu3=newStudent("李明","1993年3月15日",20);2、定義3個(gè)對(duì)象五、任務(wù)小結(jié):1、在聲明帶參數(shù)的對(duì)象時(shí),其參數(shù)的順序和類型必須與帶參數(shù)的構(gòu)造函數(shù)參數(shù)列表的順序和類型一致。2、類是一種抽象的數(shù)據(jù)類型,是對(duì)同一類事物的共同屬性和方法的抽象。對(duì)象是類的實(shí)例,同一個(gè)類可以有多個(gè)對(duì)象,而一個(gè)對(duì)象只屬于一類。例如任務(wù)三中,學(xué)生類有3個(gè)學(xué)生對(duì)象,stu1、stu2和stu3,這3個(gè)對(duì)象都分別有自己的名字、出生年月和年齡。第7章選擇流程控制語句

——任務(wù)四

為學(xué)生類添加一個(gè)方法顯示學(xué)生信息和學(xué)生狀態(tài)一、任務(wù)描述:為任務(wù)三的學(xué)生類添加如下4個(gè)非靜態(tài)方法1、方法display,其功能是顯示學(xué)生基本信息。2、方法register,其功能是顯示學(xué)生正在注冊(cè)狀態(tài)。3、方法onschool,其功能是顯示學(xué)生正在校學(xué)習(xí)狀態(tài)。4、方法graduate,其功能是顯示學(xué)生已經(jīng)畢業(yè)狀態(tài)。在Main方法中利用stu1對(duì)象調(diào)用這4個(gè)方法,運(yùn)行結(jié)果如圖所示:二、任務(wù)準(zhǔn)備:(1)方法的聲明1、方法類的方法主要是和類相關(guān)的操作,類似于C語言和C++語言里的函數(shù)。方法是類的外部界面,對(duì)于某些私有屬性來說,外部界面要實(shí)現(xiàn)對(duì)它們的操作只能通過方法來實(shí)現(xiàn)。方法類似于函數(shù)。方法的聲明可以包含一組特性和private、public、protected、internal個(gè)訪問修飾符的任何一個(gè)有效組合,還可以包含new、static、virtual、override、sealed、abstract以及extern等修飾符。二、任務(wù)準(zhǔn)備:如果以下所有條件都為“真”,則表明所聲明的方法具有一個(gè)有效的修飾符組合。方法的聲明格式如下:修飾符方法名(形參列表){方法主體}1、方法(1)方法的聲明二、任務(wù)準(zhǔn)備:1、方法(2)方法的分類方法分為靜態(tài)方法和非靜態(tài)方法。1)靜態(tài)方法靜態(tài)方法通過static修飾符修飾。靜態(tài)方法不對(duì)特定實(shí)例進(jìn)行操作,在該方法中引用this指針會(huì)報(bào)錯(cuò)。2)非靜態(tài)方法非靜態(tài)方法是對(duì)類的某個(gè)給定的實(shí)例進(jìn)行操作,該方法可以使用this指針來訪問。二、任務(wù)準(zhǔn)備:1、方法(3)方法的重載方法的重載是指方法的名字一樣,但是方法中的參數(shù)個(gè)數(shù)、類型或順序不一樣。例如任務(wù)6.2中我們就定義了兩個(gè)構(gòu)造函數(shù),一個(gè)帶參數(shù)、一個(gè)不帶參數(shù),這就是構(gòu)造函數(shù)的重載。那么,其方法的重載也是這一個(gè)意思。例

定義一個(gè)方法add可以實(shí)現(xiàn)2個(gè)整數(shù)的相加和兩個(gè)字符串的連接,如圖所示。二、任務(wù)準(zhǔn)備:程序代碼如下所示:classProgram{publicintadd(inta,intb){returna+b;}publicstringadd(stringstr1,stringstr2){returnstr1+str2;}staticvoidMain(string[]args){Programab=newProgram();Programstr=newProgram();Console.WriteLine("{0}+{1}={2}",2,3,ab.add(2,3));Console.WriteLine("{0}+{1}={2}","C#","程序設(shè)計(jì)",str.add("C#","程序設(shè)計(jì)"));Console.ReadLine();}}四、任務(wù)實(shí)施:1、打開任務(wù)三中建立的stuclass控制臺(tái)應(yīng)用程序。2、為Student類添加display方法:publicvoiddisplay(){Console.WriteLine("姓名:"+name+",出生日期:"+birthday+",年齡:"+age);}四、任務(wù)實(shí)施:3、為Student類添加register、onschool和graduate方法:publicvoidregister(){Console.WriteLine(name+"注冊(cè)中...");}publicvoidonschool(){Console.WriteLine(name+"在校學(xué)習(xí)...");}publicvoidgraduate(){Console.WriteLine(name+"已經(jīng)畢業(yè)了...");}四、任務(wù)實(shí)施:

stu2.display();stu2.register();stu2.onschool();stu2.graduate();4、在Main函數(shù)中調(diào)用display、register、onschool和graduate方法。5、運(yùn)行程序顯示如圖所示。1、非靜態(tài)方法屬于對(duì)象,使用對(duì)象來引用,方法如下:五、任務(wù)小結(jié):2、靜態(tài)方法屬于類,不屬于某個(gè)實(shí)例。請(qǐng)大家修改display為靜態(tài)方法,在public前面加上static修飾符,然后運(yùn)行,會(huì)發(fā)現(xiàn)編譯錯(cuò)誤。3、將display方法做如下修改:對(duì)象名.方法名(實(shí)參列表);staticpublicvoiddisplay(){Console.WriteLine("顯示學(xué)生基本信息!");}在Main函數(shù)中直接調(diào)用:五、任務(wù)小結(jié):然后運(yùn)行程序,顯示如下圖所示結(jié)果:display();第7章面向?qū)ο缶幊?/p>

——任務(wù)五修改學(xué)生類,利用方法訪問字段

一、任務(wù)描述:修改任務(wù)四中的字段訪問修飾符為private。然后添加方法來訪問name、birthday和age字段。classStudent{public

stringname;publicstringbirthday;public

intage;

}classStudent{private

stringname;privatestringbirthday;private

intage;

}直接訪問通過方法訪問二、任務(wù)準(zhǔn)備:字段是與對(duì)象或類相關(guān)聯(lián)的變量,它的作用是用來存儲(chǔ)對(duì)象屬性的值。如果把字段聲明為public,那么在類外面能夠訪問此字段。在類外訪問字段的格式是:對(duì)象名.字段名例如任務(wù)三中的:

="李雷";stu1.birthday="1992年5月1日";stu1.age=21;1、字段三、任務(wù)分析://設(shè)置字段name的值publicvoidSetName(stringxm){

}因?yàn)閜rivate字段不能在類體外直接訪問,需要通過類的方法,現(xiàn)在為類添加6個(gè)方法來為字段進(jìn)行賦值和取值:其余4個(gè)方法類似。1、字段//獲取字段name的值publicstringGetName(){

}四、任務(wù)實(shí)施:‘S'isinaccessibleduetoitsprotectionlevel ‘Student.birthday'isinaccessibleduetoitsprotectionlevel‘Student.age'isinaccessibleduetoitsprotectionlevel1、修改字段name、birthday和age的訪問修飾符為private。這時(shí)運(yùn)行會(huì)出現(xiàn)以下錯(cuò)誤:出錯(cuò)原因:這3個(gè)字段均為私有,外部是不能直接訪問的。四、任務(wù)實(shí)施://設(shè)置字段name的值publicvoidSetName(stringxm){name=xm;

}3、對(duì)于私有變量,類體外是不能直接訪問,需要通過方法來訪問。下面,我們來定義方法來訪問Student類的私有變量name。//獲取字段name的值publicstringGetName(){returnname;}4、在Main函數(shù)中可以通過SetName方法為字段name賦值。

stu2.SetName("李雷");四、任務(wù)實(shí)施://讀取birthady方法publicvoidSetBirthday(stringsr){birthday=sr;}publicstringGetBirthday(){returnbirthday;

}5、為其他2個(gè)字段birthday和age仿造上述方法添加方法實(shí)現(xiàn)訪問://讀取age方法

publicvoidSetAge(intnl){age=nl;}publicintGetAge(){returnage;}四、任務(wù)實(shí)施:stu2.SetName("李雷");stu2.SetBirthday("1992年5月1日");5、為其他2個(gè)字段birthday和age仿造上述方法添加方法實(shí)現(xiàn)訪問在Main函數(shù)中可以通過SetBirthday和SetAge方法為字段birthday和age賦值6、編譯運(yùn)行,查看結(jié)果,無錯(cuò)誤,結(jié)果與之前一致。五、任務(wù)小結(jié):1、對(duì)于private私有變量,在類的外部不能直接訪問,只能通過類的方法來訪問。第7章面向?qū)ο缶幊?/p>

——任務(wù)六

利用屬性和索引器分別訪問存儲(chǔ)數(shù)據(jù)一、任務(wù)描述:修改任務(wù)五中的字段讀取方法為屬性訪問器。方法訪問字段屬性訪問器訪問字段二、任務(wù)準(zhǔn)備:屬性是對(duì)實(shí)體特征的描述,比如任務(wù)五中的name、birthday和age就是類Student的屬性。屬性不表示具體的存儲(chǔ)位置,屬性具有訪問器,這些訪問器指定屬性的值被寫入或讀出的執(zhí)行語句。開發(fā)者可以像公共數(shù)據(jù)成員一樣使用屬性。屬性的聲明格式如下:修飾符類型屬性名{get{get訪問器體}set{set訪問器體}}1、屬性根據(jù)有無get和set訪問器體,屬性分為以下幾種:(1)可讀可寫屬性:有g(shù)et和set訪問器體。(2)只讀屬性:只有g(shù)et訪問器體。(3)只寫屬性:只有set訪問器體。二、任務(wù)準(zhǔn)備:索引器通常用來操作數(shù)組中的元素。索引器的聲明方式與屬性很相似,兩者之間的區(qū)別在于索引器在聲明時(shí)需要定義參數(shù)。索引器的聲明格式如下:修飾符類型this[參數(shù)列表]{get{get訪問器體}set{set訪問器體}}2、索引器屬性訪問器與方法有一樣的重要,屬性訪問器實(shí)際上也是方法,但是開發(fā)者在使用起來像字段。四、任務(wù)實(shí)施://讀取name方法publicvoidSetName(stringxm){name=xm;}publicstringGetName(){returnname;}1、打開任務(wù)五中建立的stuclass控制臺(tái)應(yīng)用程序,修改字段讀取name的方法為屬性訪問器:publicstringName{set{name=value;}get{returnname;}}value代表屬性值四、任務(wù)實(shí)施:stu2.Name="李雷";2、使用屬性訪問器Name。屬性訪問器使用起來像是對(duì)字段直接賦值,實(shí)際上也是用方法實(shí)現(xiàn)。3、為其他2個(gè)字段birthday和age仿造上述方法添加方法實(shí)現(xiàn)訪問:

publicintAge{set{Age=value;}get{returnAge;}}publicintAge{set{Age=value;}get{returnAge;}}四、任務(wù)實(shí)施:stu2.Birthady="1992年5月1日";stu2.Age=21;3、為其他2個(gè)字段birthday和age仿造上述方法添加方法實(shí)現(xiàn)訪問在Main函數(shù)中可以通過Birthday和Age屬性訪問器為字段birthday和age賦值:4、編譯運(yùn)行,查看結(jié)果,無錯(cuò)誤,結(jié)果與之前一致。五、任務(wù)小結(jié):1、對(duì)于類的屬性,可以通過屬性訪問器來訪問。2、屬性訪問器的類型應(yīng)該與屬性的類型一致。第7章面向?qū)ο缶幊?/p>

——任務(wù)七定義一個(gè)newStudent類一、任務(wù)描述:定義一個(gè)Student類的派生類:newStudent類,該派生類增加一個(gè)屬性:專業(yè)。并在派生類中重載方法display。定義newStudent類的對(duì)象newstu并賦值,調(diào)用方法display顯示學(xué)生信息。運(yùn)行如下圖所示。二、任務(wù)準(zhǔn)備:面向?qū)ο蟮娜齻€(gè)基本特征是:封裝、繼承、多態(tài),如圖所示。1、面向?qū)ο筇匦远?、任?wù)準(zhǔn)備:1、面向?qū)ο筇匦裕?)封裝封裝是面向?qū)ο蟮奶卣髦?,是?duì)象和類概念的主要特性。面向?qū)ο缶幊讨?,大多都是以封裝作為數(shù)據(jù)封裝的基本單位。封裝就是把客觀事物封裝成抽象的類,類可以把自己的數(shù)據(jù)和方法只讓可信的類或者對(duì)象操作,對(duì)不可信的進(jìn)行信息隱藏。封裝的目的是增強(qiáng)安全性和簡化編程。類的使用者不需要了解類內(nèi)部細(xì)節(jié),只需要通過外部接口來訪問類的成員。二、任務(wù)準(zhǔn)備:1、面向?qū)ο筇匦裕?)繼承“繼承”是面向?qū)ο缶幊?OOP)語言的一個(gè)主要功能。繼承是指這樣一種能力:它可以使用現(xiàn)有類的所有功能,并在無需重新編寫原來的類的情況下對(duì)這些功能進(jìn)行擴(kuò)展。任何類都是另外一個(gè)類的繼承。在面向?qū)ο缶幊讨校焕^承的類稱為基類、父類或超類,通過繼承創(chuàng)建的新類稱為“子類”或“派生類”。C#中提供了的類的繼承機(jī)制,但只支持單繼承,不支持多重繼承。在考慮使用繼承時(shí),有一點(diǎn)需要注意,那就是兩個(gè)類之間的關(guān)系應(yīng)該是“屬于”關(guān)系。例如,Employee是一個(gè)人,Manager也是一個(gè)人,因此這兩個(gè)類都可以繼承Person類。但是Leg類卻不能繼承Person類,因?yàn)橥炔⒉皇且粋€(gè)人。二、任務(wù)準(zhǔn)備:1、面向?qū)ο筇匦裕?)繼承繼承一個(gè)類時(shí),類成員的訪問性是一個(gè)重要的問題。在進(jìn)行類的繼承時(shí),要注意對(duì)基類成員的訪問問題。C#共有五種訪問修飾符:public、private、protected、internal、protectedinternal,作用范圍如下表所示。訪問修飾符說明public公有訪問。不受任何限制。private私有訪問。只限于本類成員訪問,子類,實(shí)例都不能訪問。protected保護(hù)訪問。只限于本類和子類訪問,實(shí)例不能訪問。internal內(nèi)部訪問。只限于本項(xiàng)目內(nèi)訪問,其他不能訪問。訪問修飾符二、任務(wù)準(zhǔn)備:1、面向?qū)ο筇匦裕?)多態(tài)在C#中,類的多態(tài)性是通過在子類(派生類)中重載基類的虛方法或函數(shù)成員來實(shí)現(xiàn)的。三、任務(wù)分析:1、基類中被重載的方法要修飾為虛方法,修飾符為vitual。2、派生類在進(jìn)行方法重載時(shí)需要加上修飾符override。3、本任務(wù)只為說明多態(tài)性,對(duì)學(xué)生類的定義盡量簡單。四、任務(wù)實(shí)施:classStudent{//字段

publicstringname;publicstringbirthday;publicintage;//方法

publicvirtualvoiddisplay(){Console.WriteLine("顯示基類對(duì)象學(xué)生基本信息!");Console.WriteLine("姓名:"+name);Console.WriteLine("出生年月:"+birthday);Console.WriteLine("年齡:"+age);}}1、打開VS2010,建立一個(gè)控制臺(tái)應(yīng)用程序。2、添加類Student,為類添加display方法來顯示學(xué)生基本信息:四、任務(wù)實(shí)施:classnewStudent:Student{publicstringmajor;//專業(yè)

publicoverridevoiddisplay()

{

Console.WriteLine("顯示派生類對(duì)象學(xué)生基本信息!");Console.WriteLine("姓名:"+name);Console.WriteLine("出生年月:"+birthday);Console.WriteLine("年齡:"+age);Console.WriteLine("專業(yè):"+major);}}3、添加類newStudent,為類多添加1個(gè)major字段表示專業(yè),重載display方法來顯示派生類對(duì)象的基本信息:overvide關(guān)鍵字四、任務(wù)實(shí)施:staticvoidMain(string[]args){Studentstu=newStudent();="李雷";stu.birthday="1992年5月1日";stu.age=21;stu.display();

4、在Main函數(shù)分別定義基類Student和派生類newStudent的對(duì)象并賦值,都調(diào)用display方法來顯示基本信息:newStudentnewstu=newnewStudent();

="韓梅梅";newstu.birthday="1993年7月9日";newstu.major="軟件技術(shù)";newstu.age=20;newstu.display();}調(diào)用基類的Display方法調(diào)用派生類的Display方法四、任務(wù)實(shí)施:5、運(yùn)行程序,觀察結(jié)果。可以看出雖然基類和派生類中有同名的display方法,但是在調(diào)用時(shí),基類對(duì)象會(huì)調(diào)用基類的display方法,而派生類會(huì)自動(dòng)調(diào)用派生類中重載的display方法,是面向?qū)ο蟪绦蛟O(shè)計(jì)中多態(tài)的體現(xiàn)。五、任務(wù)小結(jié):1、基類中被重載的方法要修飾為虛方法,修飾符為vitual。2、派生類在進(jìn)行方法重載時(shí)需要加上修飾符override。第7章面向?qū)ο缶幊?/p>

——任務(wù)八定義抽象類Person一、任務(wù)描述:定義一個(gè)抽象類Person,里面包含私有字段姓名name和抽象方法Say。定義一個(gè)抽象類Person的派生類Chinese,在派生類Chinese中寫抽象方法Say。最后在Main中實(shí)例化派生類Chinese的一個(gè)對(duì)象。二、任務(wù)準(zhǔn)備:1、抽象類與抽象方法(1)抽象類訪問修飾符abstractclass類名:基類或接口{}抽象類主要用來提供多個(gè)派生類可共享的基類的公共定義。具體語法格式如下:其中abstract為關(guān)鍵字。抽象類不能被實(shí)例化為具體的對(duì)象。二、任務(wù)準(zhǔn)備:1、抽象類與抽象方法(2)抽象方法publicabstractvoidSay();在方法的前面加上abstract為關(guān)鍵字就是抽象方法,例如:C#中規(guī)定,類中只要有一個(gè)方法為abstract修飾的抽象方法,那么這個(gè)類就必須被定義為抽象類。聲明抽象方法時(shí),不能使用virtual、statci和private修飾符。抽象方法不提供任何具體實(shí)現(xiàn),需要在非抽象派生類中重寫抽象方法。三、任務(wù)分析:1、基類中被重載的方法要修飾為虛方法,修飾符為vitual。2、派生類在進(jìn)行方法重載時(shí)需要加上修飾符override。3、本任務(wù)只為說明多態(tài)性,對(duì)學(xué)生類的定義盡量簡單。四、任務(wù)實(shí)施:publicabstractclassPerson{privatestringname;//字段

publicstringName//屬性{get{returnname;}set{name=value;}

}

publicabstractvoidSay();//抽象方法

}1、打開VS2010,建立一個(gè)控制臺(tái)應(yīng)用程序。2、定義一個(gè)抽象類Person,里面包含私有字段姓名name和抽象方法Say:抽象方法abstract關(guān)鍵字四、任務(wù)實(shí)施:publicclassChinese:Person{

publicoverridevoidSay(){Console.WriteLine("我的名字是{0},我是中國人!",Name);}}3、定義一個(gè)抽象類Person的派生類Chinese,在派生類Chinese中重寫抽象方法Say。四、任務(wù)實(shí)施:staticvoidMain(string[]args){ChineseLi=newChinese();Li.Name="李雷";Li.Say();Console.ReadLine();}4、在Main中實(shí)例化派生類Chinese的一個(gè)對(duì)象。派生類對(duì)象抽象方法調(diào)用四、任務(wù)實(shí)施:5、運(yùn)行程序,觀察結(jié)果。修改ChineseLi=newChinese();為PersonLi=newPerson();會(huì)報(bào)錯(cuò):Cannotcreateaninstanceoftheabstractclassorinterface'inter.Person'。表示抽象類或接口不能被實(shí)例化。五、任務(wù)小結(jié):1、抽象類和抽象方法必須加abstract修飾符,抽象類不能被實(shí)例化為具體對(duì)象。2、抽象類中的抽象方法只有聲明,沒有具體實(shí)現(xiàn)。3、從抽象類派生來的派生類必須重寫抽象方法,不然會(huì)報(bào)錯(cuò)。第7章面向?qū)ο缶幊?/p>

——任務(wù)九定義接口一、任務(wù)描述:本任務(wù)主要學(xué)習(xí)接口的定義,領(lǐng)略接口和抽象類的不同。定義一個(gè)接口Flyable,里面有一個(gè)方法Fly,定義一個(gè)方法Walkable,里面有一個(gè)方法Walk。定義一個(gè)類Dog,繼承接口Walkable。定義一個(gè)類Bird,繼承接口Flyabl和Walkable。二、任務(wù)準(zhǔn)備:1、接口接口相當(dāng)于一種契約,使用接口的開發(fā)人員必須嚴(yán)格遵守該接口提出的約定。例如:每個(gè)手機(jī)都有一個(gè)充電器接口,只要跟這個(gè)接口匹配的充電器都可以為這個(gè)手機(jī)充電。二、任務(wù)準(zhǔn)備:1、接口(1)接口的聲明修飾符interface

接口名稱:繼承的接口列表{接口內(nèi)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論