




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
主講教師:本課學(xué)時:聯(lián)系方式:C#程序設(shè)計教程第四章面向?qū)ο缶幊袒A(chǔ)
本章主要內(nèi)容介紹
4.1面向?qū)ο蟾拍?/p>
4.2類
4.3方法
4.4屬性
4.5類庫與命名空間
4.6小結(jié)CONTENT本章學(xué)習(xí)目標(biāo):
熟練掌握類的定義與使用熟練掌握類的字段熟練掌握類的構(gòu)造函數(shù)熟練掌握類的方法的定義和使用掌握類屬性的定義和使用面向?qū)ο蟮幕靖拍顚ο箢悓嶓w抽象數(shù)據(jù)類概念世界現(xiàn)實世界計算機(jī)世界抽象實例化抽象計算機(jī)邏輯實現(xiàn)映射對象屬性型號價格里程行為起動停車行駛屬性車輪數(shù)量檔的數(shù)量行為加速換檔剎車屬性名稱顏色品種行為搖尾巴吃東西犬吠現(xiàn)實世界中某個具體的物理實體在計算機(jī)邏輯中的映射和體現(xiàn)對象屬性型號價格里程行為起動停車行駛屬性車輪數(shù)量檔的數(shù)量行為加速換檔剎車屬性名稱顏色品種行為搖尾巴吃東西犬吠現(xiàn)實世界中某個具體的物理實體在計算機(jī)邏輯中的映射和體現(xiàn)類類是C#中的一種結(jié)構(gòu),用于在程序中模擬現(xiàn)實生活的事物語法:[訪問修飾符]class<類名>{//類的主體}示例:classEmployee{//類的主體}//成員變量//成員方法類與對象類是一種抽象的數(shù)據(jù)類型將類實例化成對象后方可使用C#中用new運(yùn)算來創(chuàng)建對象EmployeeobjEmployee;objEmployee=newEmployee();
Form1frm=newForm1();frm.Show();
面向?qū)ο蟮某绦蛟O(shè)計(OOP)是一種基于結(jié)構(gòu)分析的、以數(shù)據(jù)為中心的程序設(shè)計方法。
面向?qū)ο蟮某绦蛟O(shè)計方法總體思路:將數(shù)據(jù)及處理這些數(shù)據(jù)的操作都封裝(Encapsulation)到一個稱為類(Class)的數(shù)據(jù)結(jié)構(gòu)中,在程序中使用的是類的實例——對象。
對象是代碼與數(shù)據(jù)的集合,是封裝好了的一個整體,對象具有一定的功能。也就是說對象是具有一定功能的程序?qū)嶓w。程序是由一個個對象構(gòu)成的,對象之間通過一定的“相互操作”傳遞消息,在消息的作用下,完成特定的功能。
面向?qū)ο蟮幕靖拍蠲嫦驅(qū)ο蟪绦蛟O(shè)計語言的三大原則
1.一切都是對象2.計算通過對象間相互通信,請求其他對象執(zhí)行動作來實現(xiàn)。對象間通過發(fā)送和接收消息來通信3.每個對象都有自己的內(nèi)存,其中可能包括了其他的對象。面向?qū)ο蟪绦蛟O(shè)計語言的三大原則封裝性封裝(encapsulation):利用ADT將數(shù)據(jù)和基于數(shù)據(jù)的操作密封在一起,系統(tǒng)的其它對象只能通過界面與其交互。封裝機(jī)制將數(shù)據(jù)和代碼捆綁到一起,避免了外界的干擾和不確定性。封裝的優(yōu)點提高了系統(tǒng)靈活性提高了系統(tǒng)安全性面向?qū)ο蟪绦蛟O(shè)計語言的三大原則繼承性繼承(Inheritance)是可以讓某個類型的對象獲得另一個類型的對象的屬性的方法。繼承支持按級分類的概念。繼承很好的支持代碼的重用性(reusability)。
面向?qū)ο蟪绦蛟O(shè)計語言的三大原則多態(tài)性多態(tài)(Polymorphism):多態(tài)的意思是事物具有不同形式的能力。例如,對不同的實例,某個操作可能會有不同的行為。這個行為依賴于所要操作數(shù)據(jù)的類型。多態(tài)機(jī)制使具有不同內(nèi)部結(jié)構(gòu)的對象可以共享相同的外部接口。多態(tài)的實現(xiàn)重載(overload)覆蓋(override)4.2類
publicclassteacher{intno;stringname;publicintNo{get{returnno;}set{no=value;}}publicstringName{get{returnname;}
set{name=value;}}
publicteacher() { // //TODO:Addconstructorlogichere // }publicteacher(intno,stringname){this.no=no;=name;}}4.2類
C#2008秉承了C++面向?qū)ο蟮乃嘘P(guān)鍵概念:封裝、繼承和多態(tài)性。其類型模型是建立在.NET虛擬對象系統(tǒng)之上的。類是面向?qū)ο蟮某绦蛟O(shè)計的基本構(gòu)成模塊。從定義上講,類是一種數(shù)據(jù)結(jié)構(gòu),這種數(shù)據(jù)結(jié)構(gòu)可以包含數(shù)據(jù)成員、函數(shù)成員等類型。其中數(shù)據(jù)成員類型有常量和事件;函數(shù)成員類型有方法、屬性和索引器等。定義類的語法語法
[修飾符]class
類名[:基類]{
……
}類聲明中的修飾符修飾符說明interal(默認(rèn))訪問修飾符,在同一個程序集中可以訪問public訪問修飾符,任何地方都可訪問abstract抽象類,不能實例化sealed密封類,不能被繼承static靜態(tài)類,不能實例化,不能被繼承partial部分類,一個類的代碼可以放在多個文件中,編譯時再將它們合并類的成員類成員說明常量與類相關(guān)的常量值字段類中的變量方法類中的函數(shù),完成特定的功能屬性對類的字段提供安全訪問事件用于說明發(fā)生了什么事情索引器像使用數(shù)組那樣訪問類的數(shù)據(jù)運(yùn)算符定義類所特有的運(yùn)算構(gòu)造函數(shù)和析構(gòu)函數(shù)對類的實例進(jìn)行初始化和銷毀語法:字段(成員變量)[訪問修飾符]數(shù)據(jù)類型成員變量;privateprotectedinternalpublic_namestatus….userNameintchar….bool…classEmployee{ privatestring_name; privatechar_gender; privatestring_qualification; privateuint_salary;}…訪問成員變量步驟1:創(chuàng)建一個類的對象EmployeeobjEmployee=newEmployee();步驟2:使用點號訪問成員變量objEmployee._name=“張三";objEmployee._name='M';字段(成員變量)字段的類型可以是C#中任何數(shù)據(jù)類型5種訪問修飾符對字段都適用(默認(rèn)為private)訪問修飾符1Teacher類private成員protected成員public成員internal成員Student類只有Student類在Teacher類都在同一程序集中,才可訪問internal成員不可訪問不可訪問可以訪問訪問修飾符2修飾符說明public所屬類的成員以及非所屬類的成員都可以訪問internal當(dāng)前程序集可以訪問private只有所屬類的成員才能訪問Protectedinternal訪問限于此程序或從該成員所屬的類派生的類型protected所屬類或派生自所屬類的類型可以訪問靜態(tài)字段例publicclassemployee{publicstaticintid;publicstringname;publicstaticintemployeecounter;publicstaticintaddemployee(){returnemployeecounter++;}}classProgram{staticvoidMain(string[]args){employee.employeecounter=0;employeee1=newemployee();employee.addemployee();employeee2=newemployee();employee.addemployee();Console.WriteLine("employeecount:{0}\n",employee.employeecounter);Console.ReadLine();}}運(yùn)行結(jié)果:非靜態(tài)字段publicclassemployee{publicstaticintid;publicstringname;publicintemployeecounter;publicvoidaddemployee(){employeecounter++;Console.WriteLine("employeecount:{0}",employeecounter);}}classProgram{staticvoidMain(string[]args){employeee1=newemployee();e1.employeecounter=100;Console.WriteLine("employeecount:{0}",e1.employeecounter);employeee2=newemployee();e2.addemployee();Console.ReadLine();}}運(yùn)行結(jié)果:靜態(tài)與非靜態(tài)字段靜態(tài)字段的定義用static關(guān)鍵字有效范疇靜態(tài)字段屬于類,是類的所有對象所共用的非靜態(tài)字段(實例字段)屬于對象,是某個特定對象專用的引用方法類名.靜態(tài)字段對象名.非靜態(tài)字段publicclassemployee{publicstaticintid;publicstringname;publicintemployeecounter;}字段的初始化classProgram{staticvoidMain(string[]args){employee.id=10;Console.WriteLine("id:{0}\n",employee.id);employeee1=newemployee();e1.employeecounter=100;Console.WriteLine("employeecount:{0}\n",e1.employeecounter);Console.ReadLine();}}運(yùn)行結(jié)果:字段的初始化聲明時自動初始化自動初始化的默認(rèn)值聲明時用賦值語句初始化賦值語句的執(zhí)行靜態(tài)字段非靜態(tài)字段非靜態(tài)字段的初始化問題構(gòu)造函數(shù)構(gòu)造函數(shù)是類的一種特殊方法,每次創(chuàng)建類的實例都會調(diào)用它[訪問修飾符]<類名>(){//構(gòu)造函數(shù)的主體}語法:…//默認(rèn)構(gòu)造函數(shù)Employee(){ _qualification="研究生"; }…示例:演示:示例1構(gòu)造函數(shù)classEmployee{
publicstring_name;publicchar_gender;publicstring_qualification;publicuint_salary;
//默認(rèn)構(gòu)造函數(shù)
public
Employee()
{_qualification=“研究生";
}
staticvoidMain(string[]args)
{ //調(diào)用默認(rèn)構(gòu)造函數(shù)
EmployeeobjEmployee=newEmployee();Console.WriteLine(“資格=" +objEmployee._qualification);Console.WriteLine(“薪水=" +objEmployee._salary);
}}輸出結(jié)果:構(gòu)造函數(shù)構(gòu)造函數(shù)是一種特殊的方法特殊的聲明方法名與類同名沒有返回類型特殊的執(zhí)行每次用new關(guān)鍵字創(chuàng)建類的實例時自動執(zhí)行不能直接調(diào)用構(gòu)造函數(shù)特殊的用途初始化對象參數(shù)化構(gòu)造函數(shù)[訪問修飾符]<類名>(){//構(gòu)造函數(shù)的主體}語法:([參數(shù)列表])…//參數(shù)化構(gòu)造函數(shù)Employee(stringstrQualification){_qualification=strQualification; }…示例:參數(shù)化構(gòu)造函數(shù)//默認(rèn)構(gòu)造函數(shù)privateEmployee(){_qualification=“研究生";}//參數(shù)化構(gòu)造函數(shù)publicEmployee(stringstrQualification,stringstrName,chargender,uintempSalary){_qualification=strQualification;_name=strName;_gender=gender;_salary=empSalary;}publicstaticvoidMain(string[]args){
//調(diào)用默認(rèn)構(gòu)造函數(shù)EmployeeobjGraduate=newEmployee();//調(diào)用參數(shù)化構(gòu)造函數(shù)EmployeeobjMBA=newEmployee("ACCPS3","張亮影",'男',5500);Console.WriteLine("默認(rèn)構(gòu)造函數(shù)輸出:\n資格="+objGraduate._qualification);Console.WriteLine("\n參數(shù)化構(gòu)造函數(shù)輸出:\n資格="+objMBA._qualification);Console.ReadLine();}輸出結(jié)果:
缺省構(gòu)造函數(shù)規(guī)則:類至少要有一個構(gòu)造函數(shù)編譯器通過強(qiáng)制添加缺省構(gòu)造函數(shù)來保證類至少要有一個構(gòu)造函數(shù)缺省構(gòu)造函數(shù)的特點無參調(diào)用基類的無參構(gòu)造函數(shù)使用缺省構(gòu)造函數(shù)的條件沒有為類編寫構(gòu)造函數(shù)基類中存在無參的構(gòu)造函數(shù)構(gòu)造函數(shù)的重載課堂上,同學(xué)們在討論正在發(fā)的新書,有些人想知道該書的id號,例外一些人想知道該書的id號和作者,不過大部分人還是想了解更多,包括該書的id好,書名,作者和價格。而構(gòu)造函數(shù)的重載的原理與此一樣,利用參數(shù)的不同,達(dá)到程序的多態(tài)性。生活例子:構(gòu)造函數(shù)的重載
classBook
{
privatestringid;
privatestringname;
privatestringauthor;
privatestringprice;
publicBook()
//默認(rèn)構(gòu)造器
{
}
publicBook(stringid)
{
this.id=id;
}
publicBook(stringid,stringname,stringauthor,stringprice)//構(gòu)造器重載
{
this.id=id;
=name;
this.author=author;
this.price=price;
}構(gòu)造函數(shù)的重載
publicstringID
//只讀屬性
{
get{returnid;}
}
publicstringName
{
set{=value;}
get{returnname;}
}
publicstringAuthor
{
set{this.author=value;}
get{returnauthor;}
}
publicstringPrice
{
set{this.price=value;}
get{returnprice;}
}構(gòu)造函數(shù)的重載多個構(gòu)造函數(shù),每個構(gòu)造函數(shù)帶有不同的參數(shù)析構(gòu)函數(shù)是用于執(zhí)行清除操作的特殊方法~<類名>()0{//析構(gòu)函數(shù)的主體}語法:…~Employee(){
}…示例:析構(gòu)函數(shù)
析構(gòu)函數(shù)也是一種特殊的方法特殊的聲明方法名:在類名前加一個~沒有參數(shù),沒有返回類型,沒有訪問修飾符特殊的執(zhí)行當(dāng)實例從內(nèi)存中刪除時,自動調(diào)用析構(gòu)函數(shù)不能直接調(diào)用析構(gòu)函數(shù)特殊的用途釋放與清理資源(.NET的垃圾回收器的功能及啟動的機(jī)制。)4.3方法對象的行為接聽響鈴掛斷PickUp(){….//用于傳送和接收信號的代碼}Ring(){….//用于顯示主叫號碼的代碼}Hang(){….//用于結(jié)束會話的代碼}聲明方法語法訪問修飾符(可選),默認(rèn)情況下為
private[訪問修飾符]返回類型<方法名>([參數(shù)列表]){//方法主體}如果不需要返回任何值,方法可能返回void數(shù)據(jù)類型如果需要返回值,則使用return語句聲明方法…..classPoint{ intx; inty;intz; voidAssign() {
System.Console.WriteLine("輸入點的值");
x=int.Parse(System.Console.ReadLine()); y=int.Parse(System.Console.ReadLine());
z=x*y;
Console.WriteLine("x:{0},y:{1},z:{2}",x,y,z);
}}…..方法Assign()
的定義
不返回任何值(void)
不接收任何值(Assign())Assign()方法方法的參數(shù)形參與實參四種類型的參數(shù)方法說明值參數(shù)形參是實參的一份拷貝形參的改變不影響實參引用型參數(shù)ref形參是實參的地址形參的改變將影響實參輸出參數(shù)out與引用型參數(shù)類似但實參可以不需初始化數(shù)組型參數(shù)params參數(shù)個數(shù)可以不確定對于引用類型的值參數(shù)靜態(tài)方法
publicclassA{int
x;
static
int
y;publicstaticvoidF(){//x=1;
//錯誤,不允許訪問
y=2;
//正確,允許訪問
Console.WriteLine("y={0}",y);}}實例方法classStudent{publicintstudcount=0;publicvoidSer(){studcount++;Console.WriteLine("studcount:{0}",studcount);}}靜態(tài)方法靜態(tài)方法的定義用static關(guān)鍵字方法的調(diào)用格式類名.靜態(tài)方法對象名.非靜態(tài)方法靜態(tài)方法的限制靜態(tài)方法中不能使用非靜態(tài)成員靜態(tài)方法與實例方法對于靜態(tài)方法和非靜態(tài)方法:
(1)靜態(tài)方法屬于類所有,非靜態(tài)方法屬于類定義的對象所有;(2)非靜態(tài)方法可以訪問類中包括靜態(tài)成員在內(nèi)的所有成員,而靜態(tài)方法只能訪問類中的靜態(tài)成員。方法重載消費(fèi)者
1固定電話電移動電話帳單管理層供應(yīng)商
1供應(yīng)商2電信電電話電對不同的數(shù)據(jù)執(zhí)行相同的任務(wù)方法重載…ClassBillPayment{ … voidPayBill(inttelephoneNumber) { //此方法用于支付固定電話話費(fèi) } voidPayBill(longconsumerNumber) { //此方法用于支付電費(fèi) } voidPayBill(longconsumerNumber,doubleamount) { //此方法用于支付移動電話話費(fèi) } …}…對不同數(shù)據(jù)執(zhí)行相似的功能方法重載intgreatest(intnum1,intnum2){ Console.WriteLine(“{0}和
{1}相比,最大的是:",num1,num2); if(num1>num2)
{ returnnum1;
} else
{ returnnum2;
}}intgreatest(intnum1,intnum2,intnum3){ Console.WriteLine(“{0},{1}和{2}相比,最大的是:",num1,num2,num3); if(num1>num2&&num1>num3)
{ returnnum1;
} elseif(num2>num1&&num2>num3)
{ returnnum2;
} else
{ returnnum3;
}}具有不同數(shù)量的參數(shù)的方法重載輸出結(jié)果:方法重載intgreatest(int[]numbers){
inttemp=numbers[0];
for(inti=1;i<numbers.Length;i++) {
if(temp<numbers[i])
temp=numbers[i]; }
returntemp;}doublegreatest(double[]numbers){doubletemp=numbers[0];
for(inti=1;i<numbers.Length;i++) {
if(temp<numbers[i])
temp=numbers[i]; }
returntemp;}具有不同類型的參數(shù)的方法重載輸出結(jié)果:方法的簽名publicvoidA(intp1,intp2){}和publicvoidB(intq1,intq2){}的簽名相同,而publicintC(intm1,intm2){}則和方法A簽名不同,因為C的返回值為int方法重載方法重載方法名相同(前提:功能相近)參數(shù)類型或者個數(shù)不同函數(shù)返回值與方法重載如果僅是函數(shù)返回值類型不同,并不是方法重載方法的簽名(MSDN)由方法的名稱和它的形參表組成。形參按從左到右的順序比較類型、種類和個數(shù)。usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceConsoleApplication3{classProgram{staticvoidMain(string[]args){Vehicle[]v=newVehicle[3];v[0]=newVehicle();v[1]=newCar();v[2]=newPlane();foreach(Vehicleveinv){Console.WriteLine(ve.Start());}Console.ReadKey();}}classVehicle{publicvirtualstringStart(){return"交通工具啟動";}}classCar:Vehicle{publicoverridestringStart(){return"汽車起步";}}classPlane:Vehicle{publicoverridestringStart(){return"飛機(jī)起飛";}}}輸出結(jié)果:方法的覆蓋方法重寫對基類同名方法,用關(guān)鍵字virtual修飾,即虛方法對派生類同名方法,用關(guān)鍵字override修飾4.4屬性字段訪問級別設(shè)為public存在的問題C#用屬性來解決此問題不直接操作類的字段,而是借助訪問器get與set進(jìn)行讀寫訪問器中可以根據(jù)程序邏輯在讀、寫字段時進(jìn)行適當(dāng)?shù)臋z查充分體現(xiàn)了面向?qū)ο蟮姆庋b性屬性例讀取
Name時調(diào)用將值賦給Name時調(diào)用
屬性的聲明只讀、只寫屬性
[訪問修飾符]數(shù)據(jù)類型屬性名
{ get{}; set{};}get訪問器用return與屬性類型一致的值set訪問器與屬性類型相同的隱式參數(shù)value命名空間
英國澳大利亞紐卡斯?fàn)柤~卡斯?fàn)柮臻gClassManager{longintsalary;………………}…….…….{longintsalary;…….………}ClassManager命名空間AdminDept命名空間ITDeptAdminDept.ManagerITDept.Manager類庫命名空間Class
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 人物形象設(shè)計題庫及答案
- 2025黑紅色企業(yè)工作匯報模板
- 癥狀和體征題目及答案
- 早產(chǎn)考試試題及答案
- 2017年母嬰保健考試題及答案
- 《創(chuàng)業(yè)史》題目及答案
- 2025年農(nóng)產(chǎn)品深加工產(chǎn)業(yè)園區(qū)產(chǎn)業(yè)鏈延伸與拓展建議書
- 勞動經(jīng)濟(jì)學(xué)四川自考測試題及答案
- 四年級科學(xué)下冊第四單元生長與變化15毛毛蟲不見了教案2冀教版
- Unit 11 Do you have a ticket?單元試卷(含答案含聽力原文)
- 三基考試試題及答案護(hù)士
- 2025年鄉(xiāng)村振興戰(zhàn)略相關(guān)知識考試題及答案
- 哈爾濱市第九中學(xué)校2024-2025學(xué)年高二下學(xué)期期中地理試卷
- CJ/T 315-2009城市市政綜合監(jiān)管信息系統(tǒng)監(jiān)管案件立案、處置與結(jié)案
- 遼寧郵政招聘筆試題庫2025
- 中國多式聯(lián)運(yùn)發(fā)展報告2024-交通運(yùn)輸部規(guī)劃研究院
- 二手房砸墻合同協(xié)議書
- 《電力設(shè)施保護(hù)》課件
- 國家開放大學(xué)2025年《創(chuàng)業(yè)基礎(chǔ)》形考任務(wù)1答案
- 混凝土行業(yè)人員培訓(xùn)課件
- 建筑設(shè)計防火規(guī)范
評論
0/150
提交評論