Delegate(Event) Sample
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 = 1000; // 建構函式,初始化小張的錢。
}
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);
}
protected virtual void OnPlayGame(EventArgs e)
{
if(PlayGame != null)
{
PlayGame(this,e);
}
}
}
// 定義委託處理程式
public delegate void PlayGameHandler(object sender,System.EventArgs e);
}