这是一个更完整的:
using System;
using System.Windows.Forms;
namespace testform
{
/// <summary>
/// Event source
/// </summary>
public class Bird
{
public Bird()
{
}
public void Flying()
{
this.OnBirdEvent(BirdStatus.Flying);
}
public void Dead()
{
this.OnBirdEvent(BirdStatus.Dead);
}
public void Sleep()
{
this.OnBirdEvent(BirdStatus.Sleeping);
}
private void OnBirdEvent(BirdStatus s)
{
if(this.BirdEvent!=null)
{
this.BirdEvent(this,new BirdEventArgs(s));
}
}
public event BirdEventHandler BirdEvent;
}
public delegate void BirdEventHandler(object sender,BirdEventArgs e);
public class BirdEventArgs:EventArgs
{
private BirdStatus _s;
public BirdEventArgs(BirdStatus s)
{
this._s=s;
}
public BirdStatus Status
{
get
{
return this._s;
}
}
}
public enum BirdStatus
{
Flying,
Sleeping,
Dead
}
/// <summary>
/// Event Target
/// </summary>
public class Hunter
{
//private Bird bird;
public Hunter(Bird bird)
{
//bird=new Bird();
bird.BirdEvent+=new BirdEventHandler(this.OnWatch);
}
private void OnWatch(object sender,BirdEventArgs e)
{
switch(e.Status)
{
case BirdStatus.Flying:
this.Sleep();
break;
case BirdStatus.Dead:
this.FireBird();
break;
case BirdStatus.Sleeping:
this.KillBird();
break;
}
}
private void KillBird()
{
//...
MessageBox.Show("Killed");
}
private void FireBird()
{
//...
MessageBox.Show("FireBird");
}
private void Sleep()
{
//...
MessageBox.Show("Sleeping");
}
}
}
如果触发,可以在Main函数中写以下代码:
Bird b = new Bird();
Hunter h = new Hunter(b);
b.Flying();