C#之事件

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();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值