事件

本文详细介绍了如何在C#中实现事件处理机制,包括定义事件所需的类型、成员及触发事件的方法,并通过实例演示了如何创建并模拟新邮件事件。

一、设计要公开事件的类型
1,第一步:定义类型来容纳所有需要发送给事件通知接受者的附加信息

2,第二步:定义事件成员

3,第三步:定义负责引发事件的方法来通知事件的登记对象
4,第四部:定义方法将输入转化为期望事件

//第一步:定义类型来容纳所有需要发送给事件通知接受者的附加信息
    public class NewMailEventArgs:EventArgs
    {
        private readonly string m_from,m_to, m_subject;

        public NewMailEventArgs(string from, string to, string subject)
        {
            m_from = from;
            m_to = to;
            m_subject = subject;
        }
        public string From {
            get { return m_from;}
        }
        public string To
        {
            get { return m_to; }
        }
        public string Subject
        {
            get { return m_subject; }
        }
    }
View Code
    public class MailManager
    {

        //第二步:定义事件成员
        public event EventHandler<NewMailEventArgs> NewMail;

        //第三步:定义负责引发事件的方法来通知事件的登记对象
        protected virtual void OnNewMail(NewMailEventArgs e)
        {
            e.Raise(this, ref NewMail);
        }

        //第四部:定义方法将输入转化为期望事件
        public void SimulateNewMail(string from, string to, string subject)
        {
            NewMailEventArgs e = new NewMailEventArgs(from, to, subject);
            OnNewMail(e);
        }

    }
View Code
    public static class EventArgExtensions
    {
        public static void Raise<TEventArg>(this TEventArg tEventArg, object sender,
            ref EventHandler<TEventArg> eventArgs) where TEventArg : EventArgs
        {

            //Volatile.Read :防止编译器优化掉代码,把temp优化掉了
            EventHandler<TEventArg> temp = Volatile.Read(ref eventArgs);
            if (temp != null)
                temp(sender, tEventArg);
        }
    }
View Code

 

转载于:https://www.cnblogs.com/zd1994/p/6691113.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值