




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、1 屬性5.5.1 屬性屬性2在類中屬性采用如下方式進行聲明:在類中屬性采用如下方式進行聲明:修飾符修飾符屬性的類型名屬性名屬性的類型名屬性名get /讀訪問器讀訪問器/可執(zhí)行語句可執(zhí)行語句 set /寫訪問器寫訪問器/可執(zhí)行語句可執(zhí)行語句屬性修飾符有屬性修飾符有new、public、protected、internal、private、static、virtual、override和和abstract共共9種。種。其中讀、寫屬性的過程分別用其中讀、寫屬性的過程分別用get訪問器和訪問器和set訪問器來表示。訪問器來表示。若若只包含只包含get,此為只讀屬性;只包含,此為只讀屬性;只包含set
2、,則為只寫屬性。,則為只寫屬性。 屬性聲明3【例【例5-21】字段和屬性示例。using System; public class Student private int nAge;/私有域私有域 public int Age/屬性,用戶控制對域的訪問屬性,用戶控制對域的訪問 get return this.nAge; set if (value != this.nAge & value 0) this.nAge = value; 示例關鍵字關鍵字value接收接收用戶給用戶給Age屬性所屬性所賦的值賦的值4 static void Main(string args) Student
3、s = new Student(); s.Age = 20; / 20傳值給傳值給value,執(zhí)行,執(zhí)行Age屬性的屬性的set訪問器訪問器 Console.WriteLine(s.Age); /執(zhí)行執(zhí)行Age屬性的屬性的get訪問器,得到返回值訪問器,得到返回值 示例5學生類定義了一個學生類定義了一個私有字段私有字段nAge,也定義了,也定義了公有屬公有屬性性Age,并包含,并包含get和和set兩個訪問器,使其既可讀也兩個訪問器,使其既可讀也可寫。可寫。在屬性的在屬性的get訪問器中,用訪問器中,用return來返回一個事物的來返回一個事物的屬性值。屬性值。在屬性的在屬性的set訪問器中可
4、以使用一個特殊的訪問器中可以使用一個特殊的隱含參數(shù)隱含參數(shù)value。該參數(shù)包含用戶指定的值,通常用在。該參數(shù)包含用戶指定的值,通常用在set訪問訪問器中,將用戶指定的值賦值到一個類變量中。器中,將用戶指定的值賦值到一個類變量中。如果沒有如果沒有set訪問器,則表示屬性是只讀的;如果沒訪問器,則表示屬性是只讀的;如果沒有有get訪問器則表示屬性是只寫的。訪問器則表示屬性是只寫的。 示例說明6 5.6 委托和事件q 委托,顧名思義,就是中間代理人的意思。q 通俗地說,委托是一個可以引用方法的對象,當創(chuàng)建一個委托,也就創(chuàng)建一個引用方法的對象,進而就可以調(diào)用那個方法,即委托可以調(diào)用它所指向的方法。q
5、 事件是建立在委托基礎上的另一個重要特性。從本質(zhì)上說,事件就是當某個事情發(fā)生時,會自動去執(zhí)行一些語句。事件是特殊化的委托,委托是事件的基礎。7委托int Multiply(int,int).int Divide(int,int).在運行時確定調(diào)用哪種方法委托和方法必須具有相同的參數(shù)-public delegate int Call(int num1, int num2);-8定義委托的關鍵語法定義委托類型:委委托名托名 委托實例名委托實例名; 委托實例名聲明委托對象:創(chuàng)建委托對象:(確定與哪些方法進行綁定)9委托 示例1using System;/ 委托定義class Math/ 乘法方法pu
6、blic int Multiply(int num1, int num2)return num1*num2;/ 除法方法public int Divide(int num1, int num2)return num1/num2;class Test static void Main(string args) / Math 類的對象Math objMath = new Math(); / 委托的對象/ 將方法與委托關聯(lián)起來/ 調(diào)用委托實例result = System.Console.WriteLine(結(jié)果為 0, result); 將方法與委托關聯(lián)起來10定義委托使用關鍵字delegate:
7、再實例化: 最后調(diào)用:相當于調(diào)用相當于調(diào)用objMath.Multiply(5,3);委托可以調(diào)用多個方法,稱為多播,使用+和-運算實現(xiàn)方法的增加和減少。如,在上例基礎上添加如下代碼:Call d= new Call(objMath.Divide);objCall += d;objCall(5,3);則運行時,先調(diào)用則運行時,先調(diào)用objMath.Multiply(5,3); 再調(diào)用再調(diào)用objMath.Divide(5,3);理解多播11定義委托的步驟1 聲明一個委托,其參數(shù)形式一定要和你想要包含的方法的參數(shù)形式聲明一個委托,其參數(shù)形式一定要和你想要包含的方法的參數(shù)形式一致。一致。publi
8、c delegate void MyDelegate(參數(shù));參數(shù)); 2 定義所有你要定義的方法,其參數(shù)形式和第一步中聲明的委托對象定義所有你要定義的方法,其參數(shù)形式和第一步中聲明的委托對象的參數(shù)形式必須相同。的參數(shù)形式必須相同。 Method(參數(shù));(參數(shù));【參數(shù)要一致】【參數(shù)要一致】3 創(chuàng)建委托對象并將所希望的方法包含在該委托對象中。創(chuàng)建委托對象并將所希望的方法包含在該委托對象中。 MyDelegate objMyDelegate = new MyDelegate(類類1.Method1);objMyDelegate += new MyDelegate(類類2.Method2);4
9、通過委托對象調(diào)用包含在其中的各個方法。通過委托對象調(diào)用包含在其中的各個方法。 objMyDelegate(待傳入的參數(shù)待傳入的參數(shù));125.6.1 委托委托【例【例5-26】委托的使用。using System; namespace Example_Delegate delegate int MyDelegate();/第一步第一步:委托聲明委托聲明 delegate int NumOpe(int a, int b); /第一步第一步:委托聲明委托聲明 class MyClass public int M1() Console.WriteLine(調(diào)用的實例的方法調(diào)用的實例的方法); ret
10、urn 0; 135.6.1 委托委托 public static int M2() Console.WriteLine(調(diào)用的靜態(tài)的方法調(diào)用的靜態(tài)的方法); return 0; class clsAdd public int Add(int num1, int num2) return (num1 + num2); 145.6.1 委托委托 class Test static void Main() MyClass cls = new MyClass(); /委托實例化委托實例化,注意參數(shù)是要使用的方法名注意參數(shù)是要使用的方法名, /且不帶括號且不帶括號 MyDelegate d = new
11、 MyDelegate(cls.M1); d(); /委托調(diào)用委托調(diào)用 d = new MyDelegate(MyClass.M2); d(); /委托調(diào)用委托調(diào)用 clsAdd add = new clsAdd(); NumOpe p = new NumOpe(add.Add); Console.WriteLine(p(1, 2); /委托調(diào)用委托調(diào)用 Console.ReadLine(); 程序的運行結(jié)果如下:程序的運行結(jié)果如下:調(diào)用的實例的方法調(diào)用的實例的方法調(diào)用的靜態(tài)的方法調(diào)用的靜態(tài)的方法3155.6.2 事件事件事件就是當對象或類狀態(tài)發(fā)生改變時,對象或類發(fā)出的信息事件就是當對象或類狀
12、態(tài)發(fā)生改變時,對象或類發(fā)出的信息或通知?;蛲ㄖ?。發(fā)出信息的對象或類稱為發(fā)出信息的對象或類稱為“事件源事件源”,對事件進行處理的方,對事件進行處理的方法稱為法稱為“接收者接收者”,通常事件源在發(fā)出狀態(tài)改變信息時,它,通常事件源在發(fā)出狀態(tài)改變信息時,它并不知道由哪個事件接收者來處理。并不知道由哪個事件接收者來處理。這就需要一種管理機制來協(xié)調(diào)事件源和接收者,在這就需要一種管理機制來協(xié)調(diào)事件源和接收者,在C#中事中事件使用委托來為觸發(fā)時將調(diào)用的方法提供類型安全的封裝。件使用委托來為觸發(fā)時將調(diào)用的方法提供類型安全的封裝。事件處理要用委托來表示。事件處理要用委托來表示。事件16理解事件 圖示搶答者 宣布人
13、宣布人搶答者“請聽題”集中注意力聆聽其他人事件源事件的發(fā)布者事件的訂閱人未訂閱該事件 定義事件 為對象訂閱該事件 將發(fā)生的事件通知給訂閱人171. 事件的聲明事件的聲明事件是類成員,以關鍵字事件是類成員,以關鍵字event聲明。聲明。格式:格式:修飾符修飾符event 委托名委托名 事件名;事件名;事件實際就是一種特殊的委托對象。事件實際就是一種特殊的委托對象。例:例:delegate void MyEventHandler();事件的聲明為:事件的聲明為:class MyEventpublic event MyEventHandler active; /active就是一個事件名就是一個事件
14、名185.6.2 事件事件2. 事件的預訂與取消事件的預訂與取消事件的預訂就是向委托的調(diào)用列表中添加方法,是事件的預訂就是向委托的調(diào)用列表中添加方法,是通過事件加上運算符通過事件加上運算符+=來實現(xiàn)的。來實現(xiàn)的。格式:格式:事件名事件名 += new 委托名委托名(方法名方法名);例:例:MyEvent evt = new MyEvent(); evt.active += new MyEventHandler(handler);又例:又例:OkButton.Click += new EventHandler(OkButton.Click);這樣,只要事件被觸發(fā),所預定的方法就會被調(diào)用。這樣,只
15、要事件被觸發(fā),所預定的方法就會被調(diào)用。195.6.2 事件事件事件的撤銷則采用左運算符事件的撤銷則采用左運算符-=來實現(xiàn)。來實現(xiàn)。 事件名事件名 -= new 委托名委托名(方法名方法名);例:例:OkButton.Click-=new EventHandler(OkButton.Click);值得注意的是,在聲明事件的類的外部,對于事件值得注意的是,在聲明事件的類的外部,對于事件的操作只能用的操作只能用+=及及-=,而不能用其他任何的運算符,而不能用其他任何的運算符,如賦值如賦值“=”、判定是否為空、判定是否為空“=”等。但是聲明事件等。但是聲明事件的類型的上下文中(即在所在類的程序內(nèi)部),
16、用這的類型的上下文中(即在所在類的程序內(nèi)部),用這些運算符是可以的。些運算符是可以的。205.6.2 事件事件3. 事件的發(fā)生事件的發(fā)生事件的發(fā)生就是對事件相對應的委托的調(diào)用,也就事件的發(fā)生就是對事件相對應的委托的調(diào)用,也就是委托的調(diào)用列表中所包含的各個方法的調(diào)用。是委托的調(diào)用列表中所包含的各個方法的調(diào)用。格式:格式:事件名事件名(參數(shù)參數(shù));215.6.2 事件事件【例【例5-28】演示事件的聲明、事件的預訂及撤銷、事件的發(fā)生。using System; namespace Example_Event delegate void MyEventHandler();/為事件建立一個委托 cla
17、ss MyEvent public event MyEventHandler activate;/聲明一個事件 public void fire() /調(diào)用此方法來觸發(fā)事件 if (activate != null) activate();/事件發(fā)生 225.6.2 事件事件 class Test static void handler() Console.WriteLine(事件發(fā)生); static void Main() MyEvent evt = new MyEvent(); /把方法handler()添加到事件列表中 evt.activate += new MyEventHandle
18、r(handler); evt.fire(); /調(diào)用觸發(fā)事件的方法 23 假設我們有個高檔的熱水器,我們給它通上電,當水溫假設我們有個高檔的熱水器,我們給它通上電,當水溫超過超過95度的時候:度的時候:1、揚聲器會開始發(fā)出語音,告訴你水的、揚聲器會開始發(fā)出語音,告訴你水的溫度;溫度;2、液晶屏也會改變水溫的顯示,來提示水已經(jīng)快燒、液晶屏也會改變水溫的顯示,來提示水已經(jīng)快燒開了開了 class Heater private int temperature; / 水溫 / 燒水 public void BoilWater() for (int i = 0; i 95) MakeAlert(tem
19、perature); ShowMsg(temperature); 24 / 發(fā)出語音警報 private void MakeAlert(int param) Console.WriteLine(“Alarm:嘀,水已經(jīng) 0 度了” , param); / 顯示水溫 private void ShowMsg(int param) Console.WriteLine(Display:水快開了,當前溫度:0度。 , param); class Program static void Main() Heater ht = new Heater(); ht.BoilWater(); 25q現(xiàn)在假設熱水器
20、由三部分組成:熱水器、警報器、顯示器,它們來自于不同廠商并進行了組裝。那么,應該是熱水器熱水器僅僅負責燒水,它不能發(fā)出警報也不能顯示水溫;在水燒開時由警報器警報器發(fā)出警報、顯示顯示器器顯示提示和水溫。 26Observer設計模式中主要包括如下兩類對象: Subject:監(jiān)視對象,它往往包含著其他對象所感興趣的內(nèi)容。在本范例中,熱水器就是一個監(jiān)視對象,它包含的其他對象所感興趣的內(nèi)容,就是temprature字段,當這個字段的值快到100時,會不斷把數(shù)據(jù)發(fā)給監(jiān)視它的對象。 Observer:監(jiān)視者,它監(jiān)視Subject,當Subject中的某件事發(fā)生的時候,會告知Observer,而Observ
21、er則會采取相應的行動。在本范例中,Observer有警報器和顯示器,它們采取的行動分別是發(fā)出警報和顯示水溫。27public class Heater private int temperature; public string type = “RealFire 001”; / 型號 public string area = “China Xian”; / 產(chǎn)地 /聲明委托 public delegate void BoiledEventHandler(Object sender, BoiledEventArgs e); public event BoiledEventHandler Boi
22、led; /聲明事件 / 定義BoiledEventArgs類,傳遞給Observer所感興趣的信息 public class BoiledEventArgs : EventArgs public readonly int temperature; public BoiledEventArgs(int temperature) this.temperature = temperature; 28 protected virtual void OnBoiled(BoiledEventArgs e) if (Boiled != null) / 如果有對象注冊 Boiled(this, e); / 調(diào)用所有注冊對象的方法 / 燒水。 public void BoilWater() for (int i = 0; i 95) /建立BoiledEventArgs 對象。 BoiledEventArgs e = new BoiledEventArgs(temperature); OnBoiled(e); / 調(diào)用 OnBolied方法 29/ 警報器public class Alarm public void MakeAlert(Object sender, Heater.BoiledEventArgs e) Heater heater = (Heater)sende
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高效的鍋爐鼓、引風機項目建議書
- 城市污水管網(wǎng)建設工程實施方案(模板)
- 2025年糧食、棉花、化肥等農(nóng)產(chǎn)品倉儲服務項目建議書
- 2025年城市污水處理廠智能化升級改造與智能監(jiān)測預警平臺應用報告
- 工業(yè)互聯(lián)網(wǎng)平臺邊緣計算硬件架構(gòu)在物聯(lián)網(wǎng)領域的創(chuàng)新優(yōu)化報告
- 教育公平與教育資源分配的政策實踐及反思
- 教育政策的綜合評價與持續(xù)改進
- 商業(yè)培訓中的教育心理學實踐
- 數(shù)字鴻溝的現(xiàn)狀及教育技術的應用前景
- 2025武漢市二手汽車交易合同書范本
- 羽毛球知識教育PPT模板
- 電梯安裝技術交底完整版
- 氧化鋁溶出機組熱試方案
- 小學閱讀理解提分公開課課件
- esd防靜電手冊20.20標準
- 教育政策與法規(guī)課件
- 養(yǎng)老護理員職業(yè)道德27張課件
- 少兒美術課件-《長頸鹿不會跳舞》
- 人教版五年級數(shù)學下冊單元及期中期末測試卷含答案(共16套)
- GB∕T 17989.1-2020 控制圖 第1部分:通用指南
- EN485.32003鋁及鋁合金薄板、帶材和厚板第三部分(譯文)
評論
0/150
提交評論