• 写一个事件(不仅仅是为控件添加事件)------------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();
            }
        }
  • 相关阅读:
    CSS+js弹出居中的背景半透明div层
    多服务器Remoting
    【Matlab图像处理】学习笔记:二值图片
    [转]各种颜色相互转换算法的C语言源代码
    [转]Xilinx:ERROR:Xst:2035
    modelsim仿真xilinx IP DCM
    [转]MATLAB out of memory
    [转]解决Xilinx Platform Studio无法打开 设置 环境变量
    【Matlab图像处理】学习笔记:读取16进制RGB文档转为彩色图片
    【Matlab图像处理】学习笔记:提取图片的R,G,B分量
  • 原文地址:https://www.cnblogs.com/xiaoleye/p/4769498.html
Copyright © 2020-2023  润新知