學(xué)習(xí)情景面向?qū)ο蟪绦蛟O(shè)計_第1頁
學(xué)習(xí)情景面向?qū)ο蟪绦蛟O(shè)計_第2頁
學(xué)習(xí)情景面向?qū)ο蟪绦蛟O(shè)計_第3頁
學(xué)習(xí)情景面向?qū)ο蟪绦蛟O(shè)計_第4頁
學(xué)習(xí)情景面向?qū)ο蟪绦蛟O(shè)計_第5頁
已閱讀5頁,還剩83頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

學(xué)習(xí)情景面向?qū)ο蟪绦蛟O(shè)計第一頁,共八十八頁,編輯于2023年,星期二面向?qū)ο蟮能浖_發(fā)技術(shù)是當(dāng)今計算機技術(shù)發(fā)展的重要成果和趨勢之一。C#是完全面向?qū)ο蟮某绦蛟O(shè)計語言。類和對象是面向?qū)ο蟪绦蛟O(shè)計中的重要概念。封裝性、繼承性和多態(tài)性是面向?qū)ο蟮奶攸c。本講主要介紹面向?qū)ο蟪绦蛟O(shè)計中的基本概念和基于C#的面向?qū)ο蟪绦蛟O(shè)計的方法。2023/6/92C#程序設(shè)計實用教程第二頁,共八十八頁,編輯于2023年,星期二

7.1對象和類—對象對象是人們要進行研究的任何事物

顏色:灰色

排量:3.0剎車產(chǎn)地:德國行駛名字:保時捷行為狀態(tài)

顏色:紅色

排量:4.0剎車產(chǎn)地:意大利行駛名字:法拉利行為狀態(tài)回顧現(xiàn)實生活中的對象,描述汽車的特征和行為有各自不同的狀態(tài)第三頁,共八十八頁,編輯于2023年,星期二

7.1類和對象小汽車

顏色:灰色

排量:3.0

剎車產(chǎn)地:德國行駛名字:保時捷行為狀態(tài)類的實例化,是由類具體化對象類排量顏色行駛剎車…歸納一組相似對象的共性對象屬性方法類描述一組相似對象的共性產(chǎn)地名字第四頁,共八十八頁,編輯于2023年,星期二7.1類和對象---類屬性型號價格里程行為起動停車行駛屬性車輪數(shù)量檔的數(shù)量行為加速換檔剎車屬性名稱顏色品種行為搖尾巴吃東西犬吠第五頁,共八十八頁,編輯于2023年,星期二7.1類和對象類:相對對象而言,類似于藍圖包含方法和數(shù)據(jù)對象:是類的實例使用關(guān)鍵字new創(chuàng)建對象具有行為對象廚房起居室浴室書房飯廳儲藏室門廊類第六頁,共八十八頁,編輯于2023年,星期二7.1類和對象數(shù)據(jù)成員成員方法對象:桑塔納對象特征:黑色20002.4T上海大眾動態(tài)特征:載人抽象實例化類:汽車屬性:顏色型號馬力生產(chǎn)廠家服務(wù):運輸數(shù)據(jù)值執(zhí)行的操作類與對象的關(guān)系示例{第七頁,共八十八頁,編輯于2023年,星期二7.1類和對象類:是一種抽象的數(shù)據(jù)類型,它是所有具有一定共性的對象的抽象。本質(zhì)上可以認(rèn)為是對對象的描述,是創(chuàng)建對象的“模板”。類的某一個對象則被稱為是類的一個實例,是類的實例化結(jié)果。對象類實例化抽象第八頁,共八十八頁,編輯于2023年,星期二課堂討論先有對象還是先有類?-應(yīng)該先定義類才可以從類的定義聲明對象。第九頁,共八十八頁,編輯于2023年,星期二7.2面向?qū)ο笳Z言的特點設(shè)計規(guī)范

面向?qū)ο蠓庋b繼承多態(tài)第十頁,共八十八頁,編輯于2023年,星期二7.2面向?qū)ο笳Z言的特點---封裝封裝,就是對數(shù)據(jù)的隱藏,封裝實現(xiàn)了把數(shù)據(jù)和操作這些數(shù)據(jù)的代碼(即離散的部件)包裝成一個對象,而將數(shù)據(jù)和操作細(xì)節(jié)(方法)隱藏起來。私有數(shù)據(jù)方法方法數(shù)據(jù)對象A對象B公有數(shù)據(jù)產(chǎn)品封裝模塊化信息隱藏第十一頁,共八十八頁,編輯于2023年,星期二7.2面向?qū)ο笳Z言的特點---繼承繼承:指面向?qū)ο蟪绦虻膬蓚€類之間的一種關(guān)系。

被繼承的類叫父類、超類或基類(SuperClass、BaseClass)繼承了父類所有屬性和方法的類叫子類(SubClass).C#只支持單繼承。繼承實現(xiàn)了軟件的重用。第十二頁,共八十八頁,編輯于2023年,星期二在面向?qū)ο蠹夹g(shù)中,山地自行車、賽車以及串座雙人自行車都是自行車類的子類,這個父子關(guān)系可以如圖所示:自行車(父類)雙人自行車子類山地自行車賽車7.2面向?qū)ο笳Z言的特點---繼承第十三頁,共八十八頁,編輯于2023年,星期二7.2面向?qū)ο笳Z言的特點---多態(tài)

多態(tài)是指一個程序中存在著同名的不同方法。在面向?qū)ο蟮某绦蛑卸鄳B(tài)表現(xiàn)為,可以利用重載在同一類中定義多個同名的不同方法實現(xiàn)多態(tài),也可以通過子類對父類方法的覆蓋實現(xiàn)多態(tài)。將軍對士兵們命令:出發(fā)!步兵步行,騎兵騎馬…將軍不必命令:步兵步行出發(fā),騎兵騎馬出發(fā)…第十四頁,共八十八頁,編輯于2023年,星期二7.3類的定義格式為:

[類修飾符]

class

類名[:基類類名]{

類體

}關(guān)鍵字合法的標(biāo)識符屬性(變量)方法第十五頁,共八十八頁,編輯于2023年,星期二例7-1:定義一個車輛類(有兩個變量,一個方法)classVehicle{

intPassengers;//乘客數(shù)intGas;//所耗燃料

voidRun()//模擬汽車運行{if(Gas>0)Gas-=10;elseConsole.Write(“沒有油了,不能再跑了”);}}成員變量(字段)成員方法第十六頁,共八十八頁,編輯于2023年,星期二7.3類的定義在哪兒書寫類的代碼?與你的源代碼文件在一塊,同一個命名空間(namespace)下。C#允許在一個類中嵌套另一個類的定義。[建議]將類書寫在另外一個.cs文件中。第十七頁,共八十八頁,編輯于2023年,星期二C#中類的定義方法類定義的示例7-3:class人{//聲明字段

public

string

姓名;

public

string

性別;

public

string年齡;

//聲明方法

public

void

吃飯(string食物){Console.Write(姓名+“正在吃:”+食物);}

}第十八頁,共八十八頁,編輯于2023年,星期二例如7_2:publicclassCuboid//類名為Cuboid{//聲明字段(定義成員變量)

privatedoublelength;

privatedoublewidth;

privatedoublehigh;publicdoubleCubage(){returnlength*width*high}}7.3類的定義聲明字段訪問控制符類的方法第十九頁,共八十八頁,編輯于2023年,星期二1.聲明字段(成員變量)

與普通變量的聲明格式相同。在類體中,字段聲明的位置沒有特殊要求,習(xí)慣上將字段聲明在類體中的最前面,以便于閱讀。7.3類的定義第二十頁,共八十八頁,編輯于2023年,星期二課本實例5-2class

Student{

//字段聲明

public

stringstrName;

private

intnAge;

//方法

voidpri(){

Console.Write("姓名為:{0},年齡為{1}",strName,nAge);}}第二十一頁,共八十八頁,編輯于2023年,星期二7.4創(chuàng)建類的對象在C#中,我們使用new運算符來創(chuàng)建類的對象。定義Vehicle類的對象

Vehiclevc=newVehicle();定義Cuboid類的對象

Cuboidcu=newCuboid();類名對象名=new

類名();實例化對象實例化對象第二十二頁,共八十八頁,編輯于2023年,星期二引用對象成員變量的語法形式為:

對象名.成員變量名(成員方法);例如:cu.length=2;cu.width=3;cu.high=5;cu.Cubage();訪問對象成員第二十三頁,共八十八頁,編輯于2023年,星期二classVehicle{

intPassengers;//乘客數(shù)

intGas;//所耗燃料

}

voidRun()//模擬汽車運行

{if(Gas>0)Gas-=10;elseConsole.Write(“沒有油了,不能再跑了”);}}Vehiclevc=newVehicle();vc.Passengers=4;vc.Gas=100;vc.Run();為7-1創(chuàng)建對象第二十四頁,共八十八頁,編輯于2023年,星期二為7-2創(chuàng)建對象例如7_2:publicclassCuboid//類名為Cuboid{//聲明字段(定義成員變量)doublelength;

publicdoublewidth;

privatedoublehigh;publicdoubleCubage(){returnlength*width*high}}Cuboidcu=newCuboidcu.length=2;cu.width=3;cu.high=5;cu.Cubage();第二十五頁,共八十八頁,編輯于2023年,星期二課本實例5-2,創(chuàng)建對象class

Student{

//字段

public

stringstrName;

public

intnAge;public

voidPintInfo(){

Console.Write("姓名為:{0}的學(xué)生年齡為:{1}",strName,nAge);}}class

test{

static

voidMain(string[]args){

Studentstu=new

Student();stu.strName="張三";stu.nAge=19;stu.PintInfo();}}第二十六頁,共八十八頁,編輯于2023年,星期二創(chuàng)建7-3對象類和對象的例子:人姓名性別年齡吃飯()王禿子:人王禿子男20吃飯()人王禿子=new

人();王禿子.姓名=“王禿子“;王禿子.性別=“男”;王禿子.年齡=20;王禿子.吃飯(“紅燒肉”);第二十七頁,共八十八頁,編輯于2023年,星期二公有成員和私有成員classstudent{

publicstringname;//姓名

privateintage;//年齡

privatestringidNumber

;//身份證號}…staticvoidMain(string[]args){studentmyStudent=newstudent();

myS="張三";

myStudent.age=20;

}私有成員公有成員實例化一個對象可以訪問無法訪問編譯錯誤

第二十八頁,共八十八頁,編輯于2023年,星期二表7.1類訪問修飾符訪問修飾符意

義public(公有)類可以在其他名字空間訪問internal(內(nèi)部)類只能為所在名字空間訪問(默認(rèn)此)(如果引用類庫,則不能訪問)表7.2成員訪問修飾符訪問修飾符意

義public(公有)訪問不受限制protected(受保護)訪問限于所在類和所在類的派生類internal(內(nèi)部)訪問限于所在名字空間內(nèi)(如果引用類庫,則不能訪問)private(私有)訪問限于所在類。7.3類的定義第二十九頁,共八十八頁,編輯于2023年,星期二公有成員和私有成員public(公有級別)定義為公有訪問級別的類的成員能夠被外界的任何對象訪問,沒有任何限制。class

Person {

publicstringName;//....}class

Program {

publicstaticvoidMain(string[]args) {

Personmyself=new

Person();myself.Name=“Jiawei”;}}第三十頁,共八十八頁,編輯于2023年,星期二private(私有級別)定義為私有訪問級別的類的成員只能被類的成員所訪問,而不能被其它對象訪問。class

Person {

privatestringName;//....}class

Program {

publicstaticvoidMain(string[]args) {

Personmyself=new

Person();//!myself.Name=“Jiawei”;}}公有成員和私有成員第三十一頁,共八十八頁,編輯于2023年,星期二private(私有級別)正確使用方法class

Person {

privatestring_name;

publicvoidSetName(stringname) {_name=name;}}class

Program {

publicstaticvoidMain(string[]args) {

Personmyself=new

Person();myself.SetName(“Jiawei”);}}公有成員和私有成員第三十二頁,共八十八頁,編輯于2023年,星期二課本實例5-3///<summary>

///學(xué)生類

///</summary>

class

Student{

//字段

public

stringstrName;

private

intnAge;

//方法

public

voidSetAge(int_nAge){

this.nAge=_nAge;}

public

intGetAge(){

return

this.nAge;}}class

UseStudent{

static

voidMain(string[]args){

Students=new

Student();s.SetAge(10);

Console.WriteLine(s.GetAge());}}第三十三頁,共八十八頁,編輯于2023年,星期二7.4

類和類的成員—屬性classStudent{privatestaticstringstrName;privatestaticintnAge;

public

voidSetAge(int_nAge)

{

this.nAge=_nAge;

}

public

intGetAge()

{

return

this.nAge;

}}方法SetAge(Value)和GetAge()分別讀取和寫入學(xué)生Age…Students;s.SetAge(20);intStuAge=s.GetAge()…每次都調(diào)用GetId()和SetId()方法會很繁瑣屬性第三十四頁,共八十八頁,編輯于2023年,星期二7.4類和類的成員—屬性classStudent{

public

stringstrName;

private

intnAge;publicstringAge{ get { returnnAge; } set { nAge=value; } }}讀取ID時調(diào)用將值賦給ID時調(diào)用

第三十五頁,共八十八頁,編輯于2023年,星期二7.4類和類的成員—屬性

[訪問修飾符]數(shù)據(jù)類型屬性名

{

get{

};

set{

};

}讀/寫屬性可以賦值和檢索值第三十六頁,共八十八頁,編輯于2023年,星期二7.4

類和類的成員—屬性[訪問修飾符]數(shù)據(jù)類型屬性名{

get{

};}只讀屬性只能檢索值第三十七頁,共八十八頁,編輯于2023年,星期二7.4類和類的成員—屬性[訪問修飾符]數(shù)據(jù)類型屬性名{set{

};}只寫屬性只能賦值第三十八頁,共八十八頁,編輯于2023年,星期二7.4

類和類的成員—屬性屬性是“聰明”的字段,“特殊”的方法定義屬性類似于定義一個方法,但使用屬性時如同使用一個字段classCat{privatestringname;privateintage;}staticvoidMain(){Catcat1=newCat();cat1.age=-13;//錯誤}第三十九頁,共八十八頁,編輯于2023年,星期二屬性的語法格式為:

[訪問修飾符]<類型名>屬性名{

get

//讀訪問器

{//執(zhí)行體

return<私有字段>;

//執(zhí)行體可任寫,但須有return<字段>語句。

}set

//寫訪問器

{//執(zhí)行體

<私有字段>=value;

//執(zhí)行體可任寫,但須有value值給某字段語句。

}}7.4

類和類的成員—屬性第四十頁,共八十八頁,編輯于2023年,星期二7.4

類和類的成員—屬性示例:publicclassCat{privateintage;publicintAge{

get{

returnage;}set

{if(value<=0||value>=20)……報告出錯elseage=value;}}第四十一頁,共八十八頁,編輯于2023年,星期二7.4

類和類的成員—屬性示例con6_2:Catcat1=newCat();cat1.Age=1;//使用Age屬性的set訪問器intn=Cat.Age;//使用Age屬性的get訪問器cat1.Age=100;//收到錯誤消息第四十二頁,共八十八頁,編輯于2023年,星期二例如7_2(添加屬性定義):publicclassCuboid//類名為Cuboid{//聲明字段(定義成員變量)

privatedoublelength;

privatedoublewidth;

privatedoublehigh;//聲明屬性

publicdoubleLength{get{returnlength;}set{length=value;}}

publicdoubleWidth{get{returnwidth;}set{width=value;}}

publicdoubleHigh{get{returnhigh;}set{high=value;}}//聲明方法

publicdoubleCubage(){returnlength*width*high}}7.4

類和類的成員—屬性數(shù)據(jù)讀取屬性名:與字段相關(guān)但不同對數(shù)據(jù)值設(shè)置關(guān)鍵字,要寫入字段的值第四十三頁,共八十八頁,編輯于2023年,星期二

7.4類和類的成員—屬性publicclassStudent{intage=26;

//姓名

privatestringname;

publicstringName

{get{returnname;}set{name=value;}

}

//問候

publicvoidSayHi(){ …}}類的成員字段屬性方法…

類名第四十四頁,共八十八頁,編輯于2023年,星期二7.4

類和類的成員—屬性如果只提供了get{},沒有set{},這樣的屬性為只讀屬性如果只提供了set{},沒有g(shù)et{},只寫屬性優(yōu)點:屬性在使用時類似于類的字段,簡單屬性在實現(xiàn)時類似于方法,可以編寫代碼控制用戶對數(shù)據(jù)的存、取,增加安全性檢查可以設(shè)置只讀或只寫屬性第四十五頁,共八十八頁,編輯于2023年,星期二

7.4

類和類的成員—屬性privateintage;//年齡publicintAge{get{returnage;}set

{

if(value>0&&value<100){

age=value;}else{

age=18;}}}myStudent.Age=-20;…//打印myStudent.Age=40;…//打印沒有訪問age公開Age錄入非法數(shù)據(jù)打印私有變量age不公開age通過公有Age訪問和約束私有字段age第四十六頁,共八十八頁,編輯于2023年,星期二什么是屬性C#不直接訪問類的數(shù)據(jù)通過訪問器訪問(get,set)classStudent{

//姓名

privatestringname;

publicstringName

{get{returnname;}set{name=value;}

}

}返回nameget用于獲取相應(yīng)字段的值set用于設(shè)置字段的值只有g(shù)et時:只讀屬性只有set時:只寫屬性get和set都存在:讀寫屬性屬性的類型和字段類型必須一致。給name賦值第四十七頁,共八十八頁,編輯于2023年,星期二屬性的特點privateintage;//年齡publicintAge{get{returnage;}set

{

if(value>0&&value<100){

age=value;}else{

age=18;}}}控制私有字段的可訪問性保護內(nèi)部數(shù)據(jù)的安全建議類內(nèi)部敏感字段使用屬性來控制訪問類型可以是各種數(shù)據(jù)類型,如:對象、數(shù)組等等第四十八頁,共八十八頁,編輯于2023年,星期二小結(jié)編寫考試管理系統(tǒng)中的Student類包含的屬性年齡(0-100)不符合的設(shè)為18姓名(只讀屬性)愛好(讀寫)給屬性賦值并打印出來第四十九頁,共八十八頁,編輯于2023年,星期二7.5類的方法----方法的定義語法訪問修飾符(可選),默認(rèn)情況下為

private[訪問修飾符]返回類型<方法名>([參數(shù)列表]){//方法主體}如果不需要返回任何值,方法可能返回void

數(shù)據(jù)類型方法是類或?qū)ο蟮男袨閷ο笮枰瞿承┦虑椋陬愔刑砑臃椒ǚ椒ǖ亩x合法的標(biāo)識符不能加“;”用逗號隔開變量定義通過return返回值如果返回類型是void,方法是否需要返回值?第五十頁,共八十八頁,編輯于2023年,星期二【例5-9】方法的定義。

classMotorcycle{publicvoidStartEngine(){}publicvoidAddGas(intgallons){}publicintDrive(intmiles,intspeed){return0;}}2023/6/951C#程序設(shè)計實用教程第五十一頁,共八十八頁,編輯于2023年,星期二7.5類的方法2.調(diào)用方法

從方法被調(diào)用的位置,可以分為在方法聲明的類內(nèi)部調(diào)用該方法和在類外部調(diào)用方法。內(nèi)部調(diào)用語法格式為:

方法名(參數(shù)列表)

在方法聲明的類定義外部調(diào)用該方法實際上是通過類聲明的對象調(diào)用該方法,其格式為:

對象名.方法名(參數(shù)列表)

第五十二頁,共八十八頁,編輯于2023年,星期二實例6_1:通過調(diào)用體積方法來實現(xiàn)計算長方體對象的體積第五十三頁,共八十八頁,編輯于2023年,星期二7.5類的方法----方法的調(diào)用【例5-10】方法的調(diào)用。Motorcyclemoto=newMotorcycle();moto.StartEngine();moto.AddGas(15);moto.Drive(5,20);第五十四頁,共八十八頁,編輯于2023年,星期二7.5類的方法----從方法返回一般來說有兩種情況將導(dǎo)致方法返回。(1)當(dāng)遇到方法的結(jié)束花括號。(2)執(zhí)行到return語句。有兩種形式的return語句:一種用在void方法中(即無需有返回值的方法),另一種用在有返回值的方法中。第五十五頁,共八十八頁,編輯于2023年,星期二【例5-11】通過方法的結(jié)束花括號返回。

classMyClass{publicvoidmyMethod(){inti;for(i=0;i<10;i++){if(i%3==0)continue;Console.WriteLine("{0}\t",i);}}staticvoidMain(){MyClassmycls=newMyClass();mycls.myMethod();}}2023/6/956C#程序設(shè)計實用教程第五十六頁,共八十八頁,編輯于2023年,星期二

【例5-12】通過方法的return語句返回。

classMyClass{publicvoidmyMethod(){inti=8;if(i>=5){i=i*2;Console.WriteLine(i);return;}else{i=i*3;Console.WriteLine(i);return;}}

2023/6/957C#程序設(shè)計實用教程staticvoidMain(){MyClassmycls=newMyClass();mycls.myMethod();}}第五十七頁,共八十八頁,編輯于2023年,星期二使用下述形式的return語句從方法返回一個值給調(diào)用者:格式:returnvalue;【例5-13】通過方法的return語句返回值。classMyClass{publicintmyMethod(){inti=8;if(i>=5){i=i*2;returni;}else{i=i*3;returni;}}staticvoidMain(){MyClassmycls=newMyClass();Console.WriteLine(mycls.myMethod());}}}2023/6/958C#程序設(shè)計實用教程第五十八頁,共八十八頁,編輯于2023年,星期二

7.5類的方法----方法的參數(shù)在方法的聲明與調(diào)用中,經(jīng)常涉及方法參數(shù),在方法聲明中使用的參數(shù)叫形式參數(shù)(形參),在調(diào)用方法中使用的參數(shù)叫實際參數(shù)(實參)。在調(diào)用方法時,參數(shù)傳遞就是將實參傳遞給形參的過程。2023/6/959C#程序設(shè)計實用教程第五十九頁,共八十八頁,編輯于2023年,星期二7.5類的方法----方法的參數(shù)

1.值參數(shù)簡單數(shù)據(jù)類型的參數(shù)為值參數(shù),它表明實參與形參之間按值傳遞。當(dāng)這個方法被調(diào)用時,編譯器為值參數(shù)分配存儲單元,然后將對應(yīng)的實參的值拷貝到形參中。這種傳遞方式的好處是在方法中對形參的修改不會影響外部的實參。2023/6/960C#程序設(shè)計實用教程第六十頁,共八十八頁,編輯于2023年,星期二

5.4.2方法的參數(shù)

【例5-14】使用值參數(shù)。usingSystem;

namespaceValueParameters{classMyClass{publicvoidSwap(intx,inty){intk;k=x;x=y;y=k;}}

2023/6/961C#程序設(shè)計實用教程classTest{staticvoidMain(){inta=8,b=10;Console.WriteLine("a={0},b={1}",a,b);MyClassmycls=newMyClass();mycls.Swap(a,b);Console.WriteLine("a={0},b={1}",a,b);}}}程序的運行結(jié)果為:a=8,b=10a=8,b=10第六十一頁,共八十八頁,編輯于2023年,星期二

7.5類的方法----方法的參數(shù)

2.引用參數(shù)用ref修飾符聲明的簡單數(shù)據(jù)類型參數(shù)為引用參數(shù)。引用數(shù)據(jù)類型作為參數(shù)引用參數(shù)并不創(chuàng)建新存儲單元,它與實參變量同處一個存儲單元。因此,對形參的修改就是對實參變量的修改。基本類型參數(shù)按引用傳遞時,實參與形參前均須使用關(guān)鍵字ref。2023/6/962C#程序設(shè)計實用教程第六十二頁,共八十八頁,編輯于2023年,星期二

7.5類的方法----方法的參數(shù)【例5-15】使用引用參數(shù)。usingSystem;

namespaceReferenceParameters{classMyClass{publicvoidSwap(refintx,refinty){intk;k=x;x=y;y=k;}}2023/6/963C#程序設(shè)計實用教程第六十三頁,共八十八頁,編輯于2023年,星期二classTest{staticvoidMain(){inta=8,b=10;Console.WriteLine("a={0},b={1}",a,b);MyClassmycls=newMyClass();mycls.Swap(refa,refb);Console.WriteLine("a={0},b={1}",a,b);}}}程序的運行結(jié)果為:a=8,b=10a=10,b=82023/6/964C#程序設(shè)計實用教程第六十四頁,共八十八頁,編輯于2023年,星期二7-6構(gòu)造函數(shù)構(gòu)造函數(shù)是類的一種特殊方法,每次創(chuàng)建類的實例都會調(diào)用它。[訪問修飾符]<類名>(){//構(gòu)造函數(shù)的主體}語法:…//默認(rèn)構(gòu)造函數(shù)Student(){ _class=“信管"; }…示例:第六十五頁,共八十八頁,編輯于2023年,星期二有以下幾點特殊性:構(gòu)造方法在創(chuàng)建對象時被自動調(diào)用。構(gòu)造方法的方法名與類名相同。沒有返回類型和返回值。構(gòu)造方法可以重載。通常用public修飾7-6構(gòu)造函數(shù)第六十六頁,共八十八頁,編輯于2023年,星期二

6.3.1聲明構(gòu)造方法聲明構(gòu)造方法有兩個特別要求:

一是構(gòu)造方法不允許有返回類型包括void類型二是構(gòu)造方法的名稱必須與類名相同。7-6構(gòu)造函數(shù)第六十七頁,共八十八頁,編輯于2023年,星期二演示:示例17-6構(gòu)造函數(shù)classStudent{privatestring_name;privatechar_gender;privatestring_class;privateuint_grade;//默認(rèn)構(gòu)造函數(shù)privateStudent()

{_class=“信管";

}staticvoidMain(string[]args)

{ //調(diào)用默認(rèn)構(gòu)造函數(shù)Studentobj=newStudent();Console.WriteLine(“班級="+obj._class);Console.WriteLine(“成績="+obj._grade);

}}第六十八頁,共八十八頁,編輯于2023年,星期二長方體類構(gòu)造方法聲明如下:publicclassCuboid//類名為Cuboid{//聲明字段(定義成員變量)

privatedoublelength;

privatedoublewidth;

privatedoublehigh;//聲明構(gòu)造方法

publicCuboid(doublel,doublew,doubleh){length=l;width=w;high=h;}//聲明屬性

publicdoubleLength{get{returnlength;}set{length=value;}}

publicdoubleWidth{get{returnwidth;}set{width=value;}}

publicdoubleHigh{get{returnhigh;}set{high=value;}}//聲明方法

publicdoubleCubage(){returnlength*width*high}}第六十九頁,共八十八頁,編輯于2023年,星期二7-6構(gòu)造函數(shù)創(chuàng)建對象:Cuboidcubiod=newCuboid(l,w,h);第七十頁,共八十八頁,編輯于2023年,星期二

7-6構(gòu)造函數(shù)【例5-5】通過構(gòu)造函數(shù),實現(xiàn)在產(chǎn)生一個學(xué)生對象時為其完成起名工作。usingSystem;

namespaceExample_Construct{///<summary>///學(xué)生類///</summary>publicclassStudent{publicstringstrName; //域

2023/6/971C#程序設(shè)計實用教程第七十一頁,共八十八頁,編輯于2023年,星期二

7-6構(gòu)造函數(shù)

///<summary>///構(gòu)造函數(shù),為學(xué)生起名///</summary>publicStudent(string_strName){this.strName=_strName;}

}classClass1{

staticvoidMain(string[]args){Students=newStudent("張三");Console.WriteLine(s.strName);}}}2023/6/972C#程序設(shè)計實用教程第七十二頁,共八十八頁,編輯于2023年,星期二

例:usingSystem;classMyClass{publicintx;publicMyclass()//類MyClass的構(gòu)造函數(shù){x=10;}}classConsDemo{publicstaticvoidMain(){MyClasst1=newMyClass();MyClasst2=newMyClass();Console.WriteLine(“{0}\t{1}”,t1.x,t2.x);}}運行結(jié)果如下:第七十三頁,共八十八頁,編輯于2023年,星期二7-6構(gòu)造函數(shù)----參數(shù)化構(gòu)造函數(shù)[訪問修飾符]<類名>{//構(gòu)造函數(shù)的主體}語法:([參數(shù)列表])…//參數(shù)化構(gòu)造函數(shù)Student(stringstrclass){_class=strclass; }…示例:第七十四頁,共八十八頁,編輯于2023年,星期二構(gòu)造函數(shù)也可以帶參數(shù)。

例:usingSystem;classFruit{publicstringcolor;publicstringshape;publicFruit(stringc,strings)//類Fruit的構(gòu)造函數(shù){color=c;shape=s;}}classTest{publicstaticvoidMain(){FruitOrange=newFruit(“orange”,”round”);//創(chuàng)建Orange實例Console.WriteLine(“{0},{1}”,Orange.color,Orange.shape);}}運行結(jié)果如下:第七十五頁,共八十八頁,編輯于2023年,星期二7-6構(gòu)造函數(shù)----參數(shù)化構(gòu)造函數(shù)//默認(rèn)構(gòu)造函數(shù)privateStudent(){_class=“信管";}//參數(shù)化構(gòu)造函數(shù)privateEmployee(stringstrclass,stringstrName,chargender,uintgrade){_class=strclass;_name=strName;_gender=gender;_grade=grade;}publicstaticvoidMain(string[]args){//調(diào)用默認(rèn)構(gòu)造函數(shù)Studentobj=newStudent();//調(diào)用參數(shù)化構(gòu)造函數(shù)Studentobj1=newStudent(“信管08“,”張亮亮“,‘男',98);Console.WriteLine(“默認(rèn)構(gòu)造函數(shù)輸出:\n班級=“+obj._class);Console.WriteLine(“\n參數(shù)化構(gòu)造函數(shù)輸出:\n班級="+obj1._class);}第七十六頁,共八十八頁,編輯于2023年,星期二析構(gòu)函數(shù)是用于執(zhí)行清除操作的特殊方法~<類名>()0{//析構(gòu)函數(shù)的主體}語法:…~Student(){

}…示例:第七十七頁,共八十八頁,編輯于2023年,星期二7.7方法重載6.4.1成員方法重載方法可以重載,即兩個或兩個以上方法有相同的名稱。重載后的方法被調(diào)用時,可根據(jù)方法的參數(shù)個數(shù)、類型來區(qū)分應(yīng)該調(diào)用哪個方法。例如能同時處理整型與浮點型數(shù)據(jù)的重載方法:publicvoidSwap(refinta,refintb){}publicvoidSwap(reffloata,reffloatb){}第七十八頁,共八十八頁,編輯于2023年,星期二為什么要重載publicintSum(intpara1,intpara2){returnpara1+para2;}整形參數(shù),返回值整型如果想讓兩個string型、兩個double型相加,怎么做?編寫兩個不同名字的方法,這樣我們在進行調(diào)用時要先判斷是什么類型,能否不判斷直接就能相加呢?第七十九頁,共八十八頁,編輯于2023年,星期二方法的重載同一個類中添加幾個名字相同,參數(shù)與返回值不同的方法publicstring

Sum(string

para1,string

para2){returnpara1+para2;}publicdoubleSum(doublepara1,doublepara2){returnpara1+para2;}調(diào)用時只要傳遞參數(shù)即可,無需判斷類型第八十頁,共八十八頁,編輯于2023年,星期二重載的方式classAdd{

publicstring

Sum(string

para1,string

para2){…}

publicintSum(intpara1,intpara2){…}}基于不同類型參數(shù)

溫馨提示

  • 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

提交評論