比如說一個公司(場景),你是老板,手下有兩個員工,小張和小王。
你命令小王,如果小張玩游戲,則小王扣去小張500元錢。這就是現實中的委托。實際上,在寫程序中,程序員就是老板,小張和小王就是兩個對象。小張玩游戲是一個方法,小張還有一個游戲事件,他玩游戲激發這個事件。而小王就是事件處理對象,他負責把小張的錢扣除500。所以,委托有如下幾個要素:1 激發事件的對象--就是小張2 處理對象事件的對象--就是小王3 定義委托,就是你讓小王監視小張。如果這三個要素都滿足的話,則你就寫出了一個完整事件的處理。下面有個例子:在vs.net2003 C#控制臺應用程序編輯運行成功:using System;namespace CSharpConsole{ public class 場景 { [STAThread] public static void Main(string[] args) { Console.WriteLine("場景開始了...."); // 生成小王 小王 w = new 小王(); // 生成小賬 小張 z = new 小張();
// 指定監視
z.PlayGame += new PlayGameHandler(w.扣錢); // 開始玩游戲 z.玩游戲(); console.writeline("場景結束..."); Console.ReadLine(); } }
// 負責扣錢的人 public class 小王 { public 小王() { Console.WriteLine("生成小王..."); } public void 扣錢(object sender,EventArgs e) {
Console.WriteLine("小王:好小子,上班時間膽敢玩游戲...");
Console.WriteLine("小王:看看你小子有多少錢..."); 小張 f = (小張)sender; Console.WriteLine("小張的錢: " + f.錢.ToString()); Console.WriteLine("開始扣錢......"); System.Threading.Thread.Sleep(500); f.錢 = f.錢 - 500; Console.WriteLine("扣完了....現在小張還剩下:" + f.錢.ToString()); } } // 如果玩游戲,則引發事件 public class 小張 { // 先定義一個事件,這個事件表示“小張”在玩游戲。 public event PlayGameHandler PlayGame; // 保存小張錢的變量 PRivate int m_Money; public 小張() { Console.WriteLine("生成小張...."); m_Money = 10000; // 構造函數,初始化小張的錢。 } public int 錢 // 此屬性可以操作小張的錢。 { get { return m_Money; } set { m_Money = value; } } public void 玩游戲() { Console.WriteLine("小張開始玩游戲了....."); Console.WriteLine("小張:CS好玩,哈哈哈! 我玩....."); System.Threading.Thread.Sleep(500); System.EventArgs e = new EventArgs(); //OnPlayGame(e); if(PlayGame != null) { PlayGame(this,e); } } protected virtual void OnPlayGame(EventArgs e) { if(PlayGame != null) { PlayGame(this,e); } } } // 定義委托處理程序 public delegate void PlayGameHandler(object sender,System.EventArgs e);}
新聞熱點
疑難解答