• 写一个事件(不仅仅是为控件添加事件)------------C#


    最近看书上有关于事件的内容,之前在写winform时,事件都是直接用的,对内部的写法并不了解。

    这里将自定义一个事件。

    首先,写一个类。

     public  class NewMailEventArgs:EventArgs//这个类以后是事件的参数,用于传递事件的一些附加信息。但是必须继承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; } }
    
        }

    再写一个类,类里面是有关事件的一些东西。

     public  class MailManager
        {
            public event EventHandler<NewMailEventArgs> NewMail;//定义一个事件,其实它是一个范型委托。这个委托需要两个参数。可以按F12跟到这个委托的定义

    //定义一个事件的触发方法,这里为了类型安全,声明称protect protected virtual void OnNewMail(NewMailEventArgs e)//上面定义的那个类,在这里用来作为参数,传递信息 { //因为时间可能被很多地方调用,为了类型安全,这里不是直接操作NewMail事件 EventHandler<NewMailEventArgs> temp = Volatile.Read(ref NewMail); if (temp != null) temp(this,e); } //公开一个方法,用于把输入转化成一个期望的事件,触发事件OnNewMail public void SimulateNewMail(string from ,string to,string subject) { NewMailEventArgs e = new NewMailEventArgs(from ,to,subject); OnNewMail(e); } }

    下面就是定义和触发事件了

     class Program
        {
            static void Main(string[] args)
            {
                MailManager mail = new MailManager();
    
                mail.NewMail += mail_NewMail;//创建事件
    
                mail.SimulateNewMail("hahah","hshshs","ksksksk");//触发这个事件
    
                mail.NewMail -= mail_NewMail;//销毁事件
            }
    
            static void mail_NewMail(object sender, NewMailEventArgs e)
            {
                Console.WriteLine("Faxing mail message:");
                Console.WriteLine("from={0},to={1},subject={2}", e.From, e.To, e.Subject);
                Console.ReadKey();
            }
        }
  • 相关阅读:
    PHP 快递单号查询api接口源码指导
    电商平台适用基础快递查询api接口对接demo解决方案
    智能物流查询api接口demo(php示例)
    解决在TP5中无法使用快递鸟查询API接口方案
    解析快递鸟在线预约取件API接口对接编码
    快递鸟批量打印电子面单接口及控件安装
    「note」原根照抄
    「atcoder
    Solution -「NOI 2021」轻重边
    Solution Set -「ARC 124」
  • 原文地址:https://www.cnblogs.com/xiaoleye/p/4769498.html
Copyright © 2020-2023  润新知