對class撰寫event
有時我們在處理class時..要撰寫物件的event..來讓其他的物件訂閱..
寫下簡單的範例.. 以後需要時自己也不會忘掉..
使用內建的delegate(EventHandler)去做
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication4 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //建立測試按鈕事件 private void button1_Click(object sender, EventArgs e) { ukhs obj = new ukhs(); //加入訂閱事件 obj.myEvent += new EventHandler(obj_myEvent); //測試 obj.goFire(); } void obj_myEvent(object sender, EventArgs e) { if (e is myEvenArg) { MessageBox.Show((e as myEvenArg).msg); } } } } //自行寫的class class ukhs { //使用內建的delegate,他需要傳遞(object sender,eventArgs e) public event EventHandler myEvent; public void goFire() { if (myEvent != null) { myEvent(this, new myEvenArg("發射飛彈!!")); } } } //繼承EventArgs class myEvenArg : EventArgs { public string msg { get; private set; } public myEvenArg(string msg) { this.msg = msg; } }
也可以自行定義delegate去做
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication4 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //建立測試按鈕事件 private void button1_Click(object sender, EventArgs e) { ukhs obj = new ukhs(); //加入訂閱事件 obj.newEvent += new ukhs.myEvent(obj_newEvent); //測試 obj.goFire(); } string obj_newEvent(string msg) { MessageBox.Show(msg); return "我已經完成任務了"; } } } //自行寫的class class ukhs { //宣到一個delegate public delegate string myEvent(string msg); public event myEvent newEvent; public void goFire() { //判斷是否有人訂閱 if (newEvent != null) { //執行delegate string getMsg = newEvent("發射飛彈!!"); MessageBox.Show(getMsg); } } }
有問題在一起討論ㄅ..