1、我們應該宣告乙個customer的類作為訂餐事件的擁有者,類中應該有bill屬性和paythebill方法;
2、然後我們應該宣告乙個waiter的類作為訂餐事件的響應者;
3、應該自定義乙個名為order的委託型別(在委託型別中我們應該定義乙個customer的變數,和乙個實參變數);
4、定義乙個傳遞事件資訊的類ordereventargs,將產品的資訊定義出來;
5、作為基礎的委託型別已經有了,我們來宣告乙個事件並寫在customer裡面,宣告乙個private委託型別的字段用來儲存和引用事件處理器,再宣告事件,宣告乙個事件處理器的新增器;
6、至此我們已經擁有了事件的其中三個部分,事件擁有者、事件響應者、事件,則我們應該在主函式中訂閱這個事件,從而在waiter中新增事件處理器;
using system;
using system.threading;
namespace eventsample_1_
}
/*事件資訊用事件名字+「eventargs」來命名,用來傳遞事件訊息的類*/
public class ordereventargs:eventargs//規定某個類用途時用於"eventargs"使用的話,就將這個類派生於「eventargs」這個類
//點的什麼菜
public string size //點的大份還是小份
}/*委託是事件的底層基礎,事件是委託的上層建築
自定義宣告乙個委託型別,與類同級,如果乙個委託是為了宣告某個事件,這個委託將用「eventhandle」作為字尾
customer點菜將設為第乙個引數
第二個引數用來訪問菜名資訊*/
public delegate void ordereventhandler(customer customer, ordereventargs e);
/*「eventhandle的用意有三:」
1、這個委託專門用來宣告事件的
2、表明了用來約束事件處理器的
3、這個委託未來建立出來的例項時專門儲存事件處理器的*/
/*事件的擁有者customer
調整訪問級別為public
保持訪問級別一致*/
public class customer
remove
}public double bill //記錄使用者在點菜方面花了多少錢
public void paythebill()//方法,列印使用者將要支付多少錢
",this.bill);
}/*為customer新增方法*/
public void walkin()
public void sitdown()
public void think()
if (this.ordereventhandle!=null)//檢查事件是否為空
}public void action()
}public class waiter//事件的響應者
",e.dishname);
double price = 10;
switch (e.size)
customer.bill += price;
}}
C 中事件的完整宣告,事件與委託欄位的區別
1 宣告乙個委託 如果要宣告乙個事件,首先要有乙個委託來約束事件和事件處理器的簽名 宣告乙個委託 public delegate void ordereventhander customer customer,ordereventargs e 構造委託的引數 ordereventargs publi...
C 事件的實現
事件是c 中乙個重要的內容,msdn上有乙個自定義事件的演示示例。我看了半天有點暈,所以新建了乙個winform工程新增了乙個按鈕,然後找出呼叫的程式,一對比做了乙個類似的示例,就明白了。看 有時候比看文件來得更快。所以還是一貫的原則,來幹的,不來稀的。csharp using system nam...
標準的事件和委託宣告寫法 C
標準的事件和委託宣告寫法 定義委託 public delegate void picchangehandler object sender,picchangeeventargs args 宣告切換事件 public static event picchangehandler picchange 呼叫...