程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> C#委托及事件

C#委托及事件

編輯:關於C#
 

有許多人問的,.Net中的委托以及事件處理。我拿簡單的例子說明一下,是現實中的例子:

比如說一個公司(場景),你是老板,手下有兩個員工,小張和小王。
你命令小王,如果小張玩游戲,則小王扣去小張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 = 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);

}

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved