zoukankan      html  css  js  c++  java
  • 写一个事件(不仅仅是为控件添加事件)------------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();
            }
        }
  • 相关阅读:
    迷の“良心”膜你赛总结*3
    bzoj1704/poj3276[Usaco2007 Mar]Face The Right Way自动转身机
    poj 1840 -- Eqs
    poj 3274 -- Gold Balanced Lineup
    poj 3349 -- Snowflake Snow Snowflakes
    poj 2442 -- Sequence
    BestCoder Round #1 1002 项目管理 (HDU 4858)
    BestCoder Round #1 1001 逃生 (HDU 4857)
    poj 1273 -- Drainage Ditches
    poj 1149 -- PIGS
  • 原文地址:https://www.cnblogs.com/xiaoleye/p/4769498.html
Copyright © 2011-2022 走看看