首页 > 编程语言 >C#事件

C#事件

时间:2023-01-07 13:22:29浏览次数:28  
标签:string C# 事件 NewMailEventArgs NewMail public subject

C#事件实现步骤

1、定义类型容纳所有发送给事件通知接收者的附加信息

事件引发时,引发事件的对象可能希望向接收事件通知的对象传递一些附加信息。这些附加信息需要封装到它自己的类中。根据约定,这个类应该派生自 System.EventArgs,且类名应该以 EventArgs结束。

    internal 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;
        }
        /// <summary>
        /// 发件人
        /// </summary>
        public string From { get {return m_from;} }
        /// <summary>
        /// 收件人
        /// </summary>
        public string To { get {return m_to;} }
        /// <summary>
        /// 主题
        /// </summary>
        public string Subject { get {return m_subject;} }
    }

2、定义事件成员

事件成员使用C#关键字 event定义,其中, NewMail是时间名称,事件成员的类型是 EventHandler

    internal class MailManager
    {
        //2、定义事件成员
        public event EventHandler<NewMailEventArgs> NewMail;
    }

3、定义负责引发事件的方法来通知事件的登记的对象

    internal class MailManager
    {
        //2、定义事件成员
        public event EventHandler<NewMailEventArgs> NewMail;
        //3、定义负责引发事件的方法来通知事件的登记的对象
        protected virtual void OnNewMail(NewMailEventArgs e)
        {
            //通知登记的对象
            NewMail?.Invoke(this, e);
        }
    }

4、定义方法将输入转化为期望事件、也可以是属性

    internal class MailManager
    {
        //2、定义事件成员
        public event EventHandler<NewMailEventArgs> NewMail;
        //3、定义负责引发事件的方法来通知事件的登记的对象
        protected virtual void OnNewMail(NewMailEventArgs e)
        {
            //通知登记的对象
            NewMail?.Invoke(this, e);
        }
        //4、定义方法将输入转化为期望事件
        public void SimulateNewMail(string from, string to, string subject)
        {
            NewMailEventArgs e = new NewMailEventArgs(from, to, subject);
            OnNewMail(e);
        }
    }

5、设计侦听事件类型

internal sealed class Fax
    {
        public Fax(MailManager mm)
        {
            //注册回调方法
            mm.NewMail += FaxMsg;
        }
        //事件处理方法
        private void FaxMsg(object sender, NewMailEventArgs e)
        {
            Console.WriteLine($"From = {e.From},To = {e.To},Subject = {e.Subject}");
        }

        //注销对事件的订阅
        public void Unregister(MailManager mm)
        {
            mm.NewMail -= FaxMsg;
        }
    }

本文参考书籍 CLR via C#

标签:string,C#,事件,NewMailEventArgs,NewMail,public,subject
From: https://www.cnblogs.com/slowly-snail/p/17032502.html

相关文章

  • windows 11 wsl2 openeuler install openhpc
    hpc:openEulerHighPerformanceComputing(HPC)SIGhttps://gitee.com/openeuler/hpchpcrunner:openEulerHighPerformanceComputing(HPC)Runner,providesunive......
  • C#中线程和定时器的使用记录
    记录学习代码。使用线程,创建一个消息队列阻塞等待消息。使用定时器,每隔一秒钟发送一条消息。监听键盘Esc按键实现程序退出。代码如下:1usingSystem;2usingSy......
  • StringCbCatW与StringCchCatW的区别
    仔细看官方文档里,区别主要在第二个参数:StringCchCatW的cbDest:以字节为单位StringCchCatW的cchDest:以字符为单位大家根据实际情况选择合适的函数。附:StringCbCat、Stri......
  • mysql 服务异常crash 原因收集
    1.打开文件描述符数超出限制,造成crash重启,ERROR信息,提示toomanyopenfiles02022-06-27T08:03:56.201006+08:000[Warning][MY-012152][InnoDB]Openfiles407ex......
  • 【哈希表】LeetCode 350. 两个数组的交集 II
    题目链接350.两个数组的交集II思路建立两个哈希表分别统计nums1和nums2中每个数字出现的个数,然后同时遍历两个哈希表,对两个对位元素取其最小值count,将count数......
  • Vmware Vcenter&Vmware Horizon漏洞检测与利用一条龙
    VmwareVcenter&VmwareHorizon漏洞检测与利用一条龙 文章作者:[email protected] 1、VmwareVcenter漏洞被动检测我们可以利用BurpSuite软件结合插件对VmwareVcen......
  • 【哈希表】LeetCode 49. 字母异位词分组
    题目链接49.字母异位词分组思路如果一对字符串是字母异位词,那么他们经过排序之后,应该是相等的。利用这一特点,我们通过哈希表建立排序后字符串到原字符串列表的映射,不......
  • C语言程序设计课程设计[2023-01-07]
    C语言程序设计课程设计[2023-01-07]C语言程序设计课程设计要求一、课程设计目的1.进一步掌握和利用C语言进行程设计的能力;2.进一步理解和运用结构化程设计的思想和......
  • ubunut安装qtcreater
    安装gcc1kxb@kxb:~$gcc-v23Command'gcc'notfound,butcanbeinstalledwith:45sudoaptinstallgcc67kxb@kxb:~$sudoaptinstall......
  • CAS原理
    1.CAS基础1.1CAS操作原理 CAS:compareandswapCAS操作包含三个操作数:内存位置(V)、预期原值(A)、更新值(B); 2Atomic原子类JDK5之后新增并发包java.util.concurrent......