學習情景面向對象程序設計_第1頁
學習情景面向對象程序設計_第2頁
學習情景面向對象程序設計_第3頁
學習情景面向對象程序設計_第4頁
學習情景面向對象程序設計_第5頁
已閱讀5頁,還剩83頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

學習情景面向對象程序設計第1頁,共88頁,2023年,2月20日,星期六面向對象的軟件開發(fā)技術是當今計算機技術發(fā)展的重要成果和趨勢之一。C#是完全面向對象的程序設計語言。類和對象是面向對象程序設計中的重要概念。封裝性、繼承性和多態(tài)性是面向對象的特點。本講主要介紹面向對象程序設計中的基本概念和基于C#的面向對象程序設計的方法。2023/4/202C#程序設計實用教程第2頁,共88頁,2023年,2月20日,星期六

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

顏色:灰色

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

顏色:紅色

排量:4.0剎車產地:意大利行駛名字:法拉利行為狀態(tài)回顧現(xiàn)實生活中的對象,描述汽車的特征和行為有各自不同的狀態(tài)第3頁,共88頁,2023年,2月20日,星期六

7.1類和對象小汽車

顏色:灰色

排量:3.0

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

面向對象封裝繼承多態(tài)第10頁,共88頁,2023年,2月20日,星期六7.2面向對象語言的特點---封裝封裝,就是對數(shù)據(jù)的隱藏,封裝實現(xiàn)了把數(shù)據(jù)和操作這些數(shù)據(jù)的代碼(即離散的部件)包裝成一個對象,而將數(shù)據(jù)和操作細節(jié)(方法)隱藏起來。私有數(shù)據(jù)方法方法數(shù)據(jù)對象A對象B公有數(shù)據(jù)產品封裝模塊化信息隱藏第11頁,共88頁,2023年,2月20日,星期六7.2面向對象語言的特點---繼承繼承:指面向對象程序的兩個類之間的一種關系。

被繼承的類叫父類、超類或基類(SuperClass、BaseClass)繼承了父類所有屬性和方法的類叫子類(SubClass).C#只支持單繼承。繼承實現(xiàn)了軟件的重用。第12頁,共88頁,2023年,2月20日,星期六在面向對象技術中,山地自行車、賽車以及串座雙人自行車都是自行車類的子類,這個父子關系可以如圖所示:自行車(父類)雙人自行車子類山地自行車賽車7.2面向對象語言的特點---繼承第13頁,共88頁,2023年,2月20日,星期六7.2面向對象語言的特點---多態(tài)

多態(tài)是指一個程序中存在著同名的不同方法。在面向對象的程序中多態(tài)表現(xiàn)為,可以利用重載在同一類中定義多個同名的不同方法實現(xiàn)多態(tài),也可以通過子類對父類方法的覆蓋實現(xiàn)多態(tài)。將軍對士兵們命令:出發(fā)!步兵步行,騎兵騎馬…將軍不必命令:步兵步行出發(fā),騎兵騎馬出發(fā)…第14頁,共88頁,2023年,2月20日,星期六7.3類的定義格式為:

[類修飾符]

class

類名[:基類類名]{

類體

}關鍵字合法的標識符屬性(變量)方法第15頁,共88頁,2023年,2月20日,星期六例7-1:定義一個車輛類(有兩個變量,一個方法)classVehicle{

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

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

public

string

姓名;

public

string

性別;

public

string年齡;

//聲明方法

public

void

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

}第18頁,共88頁,2023年,2月20日,星期六例如7_2:publicclassCuboid//類名為Cuboid{//聲明字段(定義成員變量)

privatedoublelength;

privatedoublewidth;

privatedoublehigh;publicdoubleCubage(){returnlength*width*high}}7.3類的定義聲明字段訪問控制符類的方法第19頁,共88頁,2023年,2月20日,星期六1.聲明字段(成員變量)

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

Student{

//字段聲明

public

stringstrName;

private

intnAge;

//方法

voidpri(){

Console.Write("姓名為:{0},年齡為{1}",strName,nAge);}}第21頁,共88頁,2023年,2月20日,星期六7.4創(chuàng)建類的對象在C#中,我們使用new運算符來創(chuàng)建類的對象。定義Vehicle類的對象

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

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

類名();實例化對象實例化對象第22頁,共88頁,2023年,2月20日,星期六引用對象成員變量的語法形式為:

對象名.成員變量名(成員方法);例如:cu.length=2;cu.width=3;cu.high=5;cu.Cubage();訪問對象成員第23頁,共88頁,2023年,2月20日,星期六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)建對象第24頁,共88頁,2023年,2月20日,星期六為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();第25頁,共88頁,2023年,2月20日,星期六課本實例5-2,創(chuàng)建對象class

Student{

//字段

public

stringstrName;

public

intnAge;public

voidPintInfo(){

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

test{

static

voidMain(string[]args){

Studentstu=new

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

人();王禿子.姓名=“王禿子“;王禿子.性別=“男”;王禿子.年齡=20;王禿子.吃飯(“紅燒肉”);第27頁,共88頁,2023年,2月20日,星期六公有成員和私有成員classstudent{

publicstringname;//姓名

privateintage;//年齡

privatestringidNumber

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

myS="張三";

myStudent.age=20;

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

第28頁,共88頁,2023年,2月20日,星期六表7.1類訪問修飾符訪問修飾符意

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

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

Person {

publicstringName;//....}class

Program {

publicstaticvoidMain(string[]args) {

Personmyself=new

Person();myself.Name=“Jiawei”;}}第30頁,共88頁,2023年,2月20日,星期六private(私有級別)定義為私有訪問級別的類的成員只能被類的成員所訪問,而不能被其它對象訪問。class

Person {

privatestringName;//....}class

Program {

publicstaticvoidMain(string[]args) {

Personmyself=new

Person();//!myself.Name=“Jiawei”;}}公有成員和私有成員第31頁,共88頁,2023年,2月20日,星期六private(私有級別)正確使用方法class

Person {

privatestring_name;

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

Program {

publicstaticvoidMain(string[]args) {

Personmyself=new

Person();myself.SetName(“Jiawei”);}}公有成員和私有成員第32頁,共88頁,2023年,2月20日,星期六課本實例5-3///<summary>

///學生類

///</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());}}第33頁,共88頁,2023年,2月20日,星期六7.4類和類的成員—屬性classStudent{privatestaticstringstrName;privatestaticintnAge;

public

voidSetAge(int_nAge)

{

this.nAge=_nAge;

}

public

intGetAge()

{

return

this.nAge;

}}方法SetAge(Value)和GetAge()分別讀取和寫入學生Age…Students;s.SetAge(20);intStuAge=s.GetAge()…每次都調用GetId()和SetId()方法會很繁瑣屬性第34頁,共88頁,2023年,2月20日,星期六7.4類和類的成員—屬性classStudent{

public

stringstrName;

private

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

第35頁,共88頁,2023年,2月20日,星期六7.4

類和類的成員—屬性

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

{

get{

};

set{

};

}讀/寫屬性可以賦值和檢索值第36頁,共88頁,2023年,2月20日,星期六7.4

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

get{

};}只讀屬性只能檢索值第37頁,共88頁,2023年,2月20日,星期六7.4

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

};}只寫屬性只能賦值第38頁,共88頁,2023年,2月20日,星期六7.4

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

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

get

//讀訪問器

{//執(zhí)行體

return<私有字段>;

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

}set

//寫訪問器

{//執(zhí)行體

<私有字段>=value;

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

}}7.4

類和類的成員—屬性第40頁,共88頁,2023年,2月20日,星期六7.4

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

get{

returnage;}set

{if(value<=0||value>=20)……報告出錯elseage=value;}}第41頁,共88頁,2023年,2月20日,星期六7.4

類和類的成員—屬性示例con6_2:Catcat1=newCat();cat1.Age=1;//使用Age屬性的set訪問器intn=Cat.Age;//使用Age屬性的get訪問器cat1.Age=100;//收到錯誤消息第42頁,共88頁,2023年,2月20日,星期六例如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ù)讀取屬性名:與字段相關但不同對數(shù)據(jù)值設置關鍵字,要寫入字段的值第43頁,共88頁,2023年,2月20日,星期六

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

//姓名

privatestringname;

publicstringName

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

}

//問候

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

類名第44頁,共88頁,2023年,2月20日,星期六7.4

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

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第46頁,共88頁,2023年,2月20日,星期六什么是屬性C#不直接訪問類的數(shù)據(jù)通過訪問器訪問(get,set)classStudent{

//姓名

privatestringname;

publicstringName

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

}

}返回nameget用于獲取相應字段的值set用于設置字段的值只有get時:只讀屬性只有set時:只寫屬性get和set都存在:讀寫屬性屬性的類型和字段類型必須一致。給name賦值第47頁,共88頁,2023年,2月20日,星期六屬性的特點privateintage;//年齡publicintAge{get{returnage;}set

{

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

age=value;}else{

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

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

數(shù)據(jù)類型方法是類或對象的行為對象需要做某些事情,在類中添加方法方法的定義合法的標識符不能加“;”用逗號隔開變量定義通過return返回值如果返回類型是void,方法是否需要返回值?第50頁,共88頁,2023年,2月20日,星期六【例5-9】方法的定義。

classMotorcycle{publicvoidStartEngine(){}publicvoidAddGas(intgallons){}publicintDrive(intmiles,intspeed){return0;}}2023/4/2051C#程序設計實用教程第51頁,共88頁,2023年,2月20日,星期六7.5類的方法2.調用方法

從方法被調用的位置,可以分為在方法聲明的類內部調用該方法和在類外部調用方法。內部調用語法格式為:

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

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

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

第52頁,共88頁,2023年,2月20日,星期六實例6_1:通過調用體積方法來實現(xiàn)計算長方體對象的體積第53頁,共88頁,2023年,2月20日,星期六7.5類的方法----方法的調用【例5-10】方法的調用。Motorcyclemoto=newMotorcycle();moto.StartEngine();moto.AddGas(15);moto.Drive(5,20);第54頁,共88頁,2023年,2月20日,星期六7.5類的方法----從方法返回一般來說有兩種情況將導致方法返回。(1)當遇到方法的結束花括號。(2)執(zhí)行到return語句。有兩種形式的return語句:一種用在void方法中(即無需有返回值的方法),另一種用在有返回值的方法中。第55頁,共88頁,2023年,2月20日,星期六【例5-11】通過方法的結束花括號返回。

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/4/2056C#程序設計實用教程第56頁,共88頁,2023年,2月20日,星期六

【例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/4/2057C#程序設計實用教程staticvoidMain(){MyClassmycls=newMyClass();mycls.myMethod();}}第57頁,共88頁,2023年,2月20日,星期六使用下述形式的return語句從方法返回一個值給調用者:格式: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/4/2058C#程序設計實用教程第58頁,共88頁,2023年,2月20日,星期六

7.5類的方法----方法的參數(shù)在方法的聲明與調用中,經常涉及方法參數(shù),在方法聲明中使用的參數(shù)叫形式參數(shù)(形參),在調用方法中使用的參數(shù)叫實際參數(shù)(實參)。在調用方法時,參數(shù)傳遞就是將實參傳遞給形參的過程。2023/4/2059C#程序設計實用教程第59頁,共88頁,2023年,2月20日,星期六7.5類的方法----方法的參數(shù)

1.值參數(shù)簡單數(shù)據(jù)類型的參數(shù)為值參數(shù),它表明實參與形參之間按值傳遞。當這個方法被調用時,編譯器為值參數(shù)分配存儲單元,然后將對應的實參的值拷貝到形參中。這種傳遞方式的好處是在方法中對形參的修改不會影響外部的實參。2023/4/2060C#程序設計實用教程第60頁,共88頁,2023年,2月20日,星期六

5.4.2方法的參數(shù)

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

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

2023/4/2061C#程序設計實用教程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);}}}程序的運行結果為:a=8,b=10a=8,b=10第61頁,共88頁,2023年,2月20日,星期六

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

2.引用參數(shù)用ref修飾符聲明的簡單數(shù)據(jù)類型參數(shù)為引用參數(shù)。引用數(shù)據(jù)類型作為參數(shù)引用參數(shù)并不創(chuàng)建新存儲單元,它與實參變量同處一個存儲單元。因此,對形參的修改就是對實參變量的修改?;绢愋蛥?shù)按引用傳遞時,實參與形參前均須使用關鍵字ref。2023/4/2062C#程序設計實用教程第62頁,共88頁,2023年,2月20日,星期六

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

namespaceReferenceParameters{classMyClass{publicvoidSwap(refintx,refinty){intk;k=x;x=y;y=k;}}2023/4/2063C#程序設計實用教程第63頁,共88頁,2023年,2月20日,星期六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);}}}程序的運行結果為:a=8,b=10a=10,b=82023/4/2064C#程序設計實用教程第64頁,共88頁,2023年,2月20日,星期六7-6構造函數(shù)構造函數(shù)是類的一種特殊方法,每次創(chuàng)建類的實例都會調用它。[訪問修飾符]<類名>(){//構造函數(shù)的主體}語法:…//默認構造函數(shù)Student(){ _class=“信管"; }…示例:第65頁,共88頁,2023年,2月20日,星期六有以下幾點特殊性:構造方法在創(chuàng)建對象時被自動調用。構造方法的方法名與類名相同。沒有返回類型和返回值。構造方法可以重載。通常用public修飾7-6構造函數(shù)第66頁,共88頁,2023年,2月20日,星期六

6.3.1聲明構造方法聲明構造方法有兩個特別要求:

一是構造方法不允許有返回類型包括void類型二是構造方法的名稱必須與類名相同。7-6構造函數(shù)第67頁,共88頁,2023年,2月20日,星期六演示:示例17-6構造函數(shù)classStudent{privatestring_name;privatechar_gender;privatestring_class;privateuint_grade;//默認構造函數(shù)privateStudent()

{_class=“信管";

}staticvoidMain(string[]args)

{ //調用默認構造函數(shù)Studentobj=newStudent();Console.WriteLine(“班級="+obj._class);Console.WriteLine(“成績="+obj._grade);

}}第68頁,共88頁,2023年,2月20日,星期六長方體類構造方法聲明如下:publicclassCuboid//類名為Cuboid{//聲明字段(定義成員變量)

privatedoublelength;

privatedoublewidth;

privatedoublehigh;//聲明構造方法

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}}第69頁,共88頁,2023年,2月20日,星期六7-6構造函數(shù)創(chuàng)建對象:Cuboidcubiod=newCuboid(l,w,h);第70頁,共88頁,2023年,2月20日,星期六

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

namespaceExample_Construct{///<summary>///學生類///</summary>publicclassStudent{publicstringstrName; //域

2023/4/2071C#程序設計實用教程第71頁,共88頁,2023年,2月20日,星期六

7-6構造函數(shù)

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

}classClass1{

staticvoidMain(string[]args){Students=newStudent("張三");Console.WriteLine(s.strName);}}}2023/4/2072C#程序設計實用教程第72頁,共88頁,2023年,2月20日,星期六

例:usingSystem;classMyClass{publicintx;publicMyclass()//類MyClass的構造函數(shù){x=10;}}classConsDemo{publicstaticvoidMain(){MyClasst1=newMyClass();MyClasst2=newMyClass();Console.WriteLine(“{0}\t{1}”,t1.x,t2.x);}}運行結果如下:第73頁,共88頁,2023年,2月20日,星期六7-6構造函數(shù)----參數(shù)化構造函數(shù)[訪問修飾符]<類名>{//構造函數(shù)的主體}語法:([參數(shù)列表])…//參數(shù)化構造函數(shù)Student(stringstrclass){_class=strclass; }…示例:第74頁,共88頁,2023年,2月20日,星期六構造函數(shù)也可以帶參數(shù)。

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

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

Sum(string

para1,string

para2){returnpara1+para2;}publicdoubleSum(doublepara1,doublepara2){returnpara1+para2;}調用時只要傳遞參數(shù)即可,無需判斷類型第80頁,共88頁,2023年,2月20日,星期六重載的方式classAdd{

publicstring

Sum(string

para1,string

para2){…}

publicintSum(intpara1,intpara2){…}}基于不同類

溫馨提示

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

評論

0/150

提交評論