.Net中自定义事件的步骤与使用

自定义事件的标准定义步骤为:

1,定义委托
2,定义事件发布者类
    声明事件
    定义事件参数类
    定义事件的On方法(直接执行事件)
    定义触发事件的方法(包括触发条件,当达到条件时调用On方法)
3,定义事件订阅者类(可以有多个订阅者类)
    定义事件处理程序方法
4,注册事件
    实例化发布者和订阅者
    在发布者事件上绑定一个已实例化的以事件处理程序方法为参数委托,完成事件注册
5,使用事件
    执行发布者中触发事件的方法,触发事件.

具体实例如下:*******************************************************************************************

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Delegate_Event
{

    // 定义事件发布者类
    public class Publisher
    {
        private int count;
        public string name = "发布者";

        // 定义委托
        public delegate void NumberChangedEventHandler(Object sender, SomeEventArgs e);

        public event NumberChangedEventHandler NumberChanged; // 声明事件

        // 定义SomeEventArgs类,传递给订阅者所感兴趣的信息,这是一个类中类
        public class SomeEventArgs : EventArgs
        {
            public readonly int count;
            public SomeEventArgs(int count)
            {
                this.count = count;
            }
        }

        //定义调用事件的OnXXX方法,以供其它触发方法调用
        protected virtual void OnNumberChanged(SomeEventArgs e)
        {
            if (NumberChanged != null)
            { // 触发事件
                NumberChanged(this, e);
            }
        }

        //定义触发事件的方法
        public void DoSomeThing()
    {
        for (int i = 0; i < 15; i++)
        {
            count++;
            if (count >= 10)//触发条件
            {
                SomeEventArgs e = new SomeEventArgs(count);
                OnNumberChanged(e);//调用方法,以引发事件
            }
        }
    }
    }

    // 定义事件订阅者
    public class Subscriber
    {
        //事件处理程序
        public void OnNumberChanged(Object sender,Publisher.SomeEventArgs e) //注意这个方法名和发布者里的同名方法,它们参数不同,作用也不用.
        {
            Publisher publisher = (Publisher)sender;
            Console.WriteLine("Subscriber notified: {0},count = {1}", publisher.name, e.count);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Publisher pub = new Publisher();
            Subscriber sub = new Subscriber();
            pub.NumberChanged += new Publisher.NumberChangedEventHandler(sub.OnNumberChanged);
            pub.DoSomeThing(); // 应该通过 DoSomeThing() 来触发事件
            Console.ReadKey();
        }
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值