第507篇-Delegate和Event异同--(内容篇3:共6篇)
一般.NET中的事件申明格式都是:public delegate void PlayGameHandler(object sender, CustomEventArgs e); sender表示事件发起者,e表示事件需要传输入的一些参数.
本文主要讲述一个事件:Zhang在上班中玩游戏(事件),Wang知道了,然后扣张的钱,最后张的钱被扣了.
主要代码逻辑如下:
namespace DelegateEventDemo
{
class Class1
{
static void Main(string[] args)
{
Console.WriteLine("Scenario is starting...");
//生成小账
Zhang z = new Zhang();
//Create Zhang
Wang w = new Wang(z);
//开始玩游戏
z.PlayGames();
Console.WriteLine("Scenario is end..");
Console.ReadLine();
}
}
public delegate void PlayGameHandler(object sender, CustomEventArgs e);
/// <summary>
/// Master
/// </summary>
public class Wang
{
/// <summary>
/// Subscribe to the event.
/// </summary>
/// <param name="?"></param>
public Wang(Zhang z)
{
// Monitor.
z.PlayGame += new PlayGameHandler(this.WithDraw);
Console.WriteLine("Create Wang.");
}
public void WithDraw(object sender, CustomEventArgs e)
{
Console.WriteLine("Wang:Good, you play games in working time..");
Console.WriteLine("Wang:Let's check your account.");
// 获取发起者
Zhang f = (Zhang)sender;
Console.WriteLine("Zhang'Money:" + f.Account.ToString());
Console.WriteLine("Withdraw from Zhang.");
System.Threading.Thread.Sleep(500);
f.Account = f.Account - 500;
Console.WriteLine(string.Format("Get the message: {0},OK,Done, the balance of Zhang is:{1}",e.Message, f.Account.ToString()));
}
}
/// <summary>
/// Trigger the event when playing games..
/// </summary>
public class Zhang
{
// Play games..
public event PlayGameHandler PlayGame;
/// <summary>
/// Account
/// </summary>
private int m_Money;
public Zhang()
{
Console.WriteLine("Create Zhang.");
m_Money = 1000;
}
public int Account
{
get
{
return m_Money;
}
set
{
m_Money = value;
}
}
public void PlayGames()
{
Console.WriteLine("Zhang is playing games..");
Console.WriteLine("Zhang:CS is excellent..");
System.Threading.Thread.Sleep(500);
CustomEventArgs e = new CustomEventArgs() { Message="This is a message"};
OnPlayGame(e);
}
protected virtual void OnPlayGame(CustomEventArgs e)
{
if (PlayGame != null)
{
PlayGame(this, e);
}
}
}
public class CustomEventArgs : EventArgs
{
public string Message { get; set; }
}
}
运行结果: