1. 若引发事件时需要传入参数,则需要定义事件参数类,否则不需要。
class MyEventArgs : EventArgs
{
public MyEventArgs(ArgsType args)
{
MyArgs = args;
}
public ArgsType MyArgs
{
get
{
return _MyArgs;
}
}
private ArgsType _MyArgs;
}
2. 声明事件发生器
class MyEventGenerator
{
//声明事件委托类型
public delegate RetType MyEventDelegate(object sender, MyEventArgs e);
// 声明事件名
public event MyEventDelegate MyEvent;
// 声明事件监听方法
public void Run(...)
{
// 方法实现
MyEventArgs myEventArgs = new MyEventArgs(args);
MyEvent(this, myEventArgs);
}
}
3. 声明事件接收器
class MyEventReceiver
{
public MyEventReceiver(MyEventGenerator myEventGenerator)
{
myEventGenerator.MyEvent += new MyEventGenerator.MyEventDelegate(this.MyEventHandler);
}
private RetType MyEventHandler(object sender, MyEventArgs args)
{
// 事件处理方法实现
}
}
4. 事件调用
MyEventGenerator generator = new MyEventGenerator();
MyEventReceiver receiver = new MyEventReceiver(generator);
generator.Run(...);
5. 示例
class MyEventArgs
{
public MyEventArgs(char args)
{
MyArgs = args;
}
public char MyArgs
{
get { return _MyArgs; }
private set { _MyArgs = value; }
}
private char _MyArgs;
}
class MyEventGenerator
{
public delegate void MyEventDelegate(object sender, MyEventArgs e);
public event MyEventDelegate MyEvent;
public void Run()
{
while (true)
{
ConsoleKeyInfo key = Console.ReadKey(true);
MyEventArgs myEventArgs = new MyEventArgs(key.KeyChar);
MyEvent(this, myEventArgs);
}
}
}
class MyEventReceiver
{
public MyEventReceiver(MyEventGenerator myEventGenerator)
{
myEventGenerator.MyEvent += new MyEventGenerator.MyEventDelegate(this.MyEventHandler);
}
private void MyEventHandler(object sender, MyEventArgs e)
{
Console.Write("+" + e.MyArgs);
}
}
class Program
{
static void Main(string[] args)
{
MyEventGenerator generator = new MyEventGenerator();
MyEventReceiver receiver = new MyEventReceiver(generator);
generator.Run();
}
}