委托事件

Posted 左转右转

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了委托事件相关的知识,希望对你有一定的参考价值。

class PubEventArgs : EventArgs
    {
        private readonly string _magname;

        public string Magname
        {
            get { return _magname; }
        } 

        public PubEventArgs(string magname)
        {
            _magname = magname;
        }
    }
    class Event//创建事件类
    {
        public delegate void PubComputerEventHandle(object sender,PubEventArgs e);//声明委托
        public event PubComputerEventHandle PubComputer;//创建委托链,即事件
        public delegate void PubLifeEventHandle(object sender, PubEventArgs e);
        public event PubLifeEventHandle PubLife;
        public virtual void OnComputer(PubEventArgs e)
        {
            PubComputerEventHandle handle = PubComputer;
            if (handle != null)
            {
                handle(this,e);
            }
        }
        public virtual void OnLife(PubEventArgs e)
        {
            PubLifeEventHandle handle = PubLife;
            if (handle != null)
            {
                handle(this, e);
            }
        }
        public void IsComputer(string magname)//创建触发事件过程
        {
            Console.WriteLine("发行"+magname+"杂志");
            OnComputer(new PubEventArgs(magname));
        }
        public void IsLife(string magname)
        {
            Console.WriteLine("发行" + magname + "杂志");
            OnComputer(new PubEventArgs(magname));
        }
    }
    class Man//创建操作主体
    {
        public string name;
        public Man(string name)
        {
            this.name = name;
        }
        public void Order(object sender, PubEventArgs e)//在主体中创建被委托的函数
        {
            Console.WriteLine(name + "订阅" + e.Magname + "刊物");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Event e = new Event();//事件建好
            Man zs = new Man("张三");//主体建好
            e.PubComputer += new Event.PubComputerEventHandle(zs.Order);//调用主体的被委托函数
            Man ls = new Man("李四");
            e.PubComputer += new Event.PubComputerEventHandle(ls.Order);
            e.PubLife += new Event.PubLifeEventHandle(ls.Order);
            e.IsComputer("电脑");//触发事件
            e.IsLife("生活");
            Console.Read();
        }
    }

 

以上是关于委托事件的主要内容,如果未能解决你的问题,请参考以下文章

jQuery代码优化:事件委托

C#事件

Javascript中的事件委托机制

js中的事件委托/代理

编写高质量代码改善C#程序的157个建议——建议137:委托和事件类型应添加上级后缀

事件委托