委托 和 事件

来源:互联网 发布:手机喊麦软件 编辑:程序博客网 时间:2024/04/29 11:54

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace ConsoleApplicationTest1

{

    /// <summary>

    /// 定义了一个事件参数的类

    /// 因为要放得是事件参数。所以要继承EventArgs类。这是放事件参数的基类

    /// </summary>

    public class MyEventArgs : EventArgs

    {

        private string message;

 

        //构造函数

        public MyEventArgs(string mess)

        {

            this.message = mess;

        }

 

        public string Message

        {

            get

            {

                return message;

            }

        }

    }

 

    /// <summary>

    /// 定义一个委托。委托除了delegate关键字。

    /// 别的应该和赋予的那个方法格式一样

    /// </summary>

    public delegate void delegateMyEventHandler(object sender, MyEventArgs myE);

 

    /// <summary>

    /// 事件发布者

    /// </summary>

    internal class Publisher

    {

        //定义一个事件的对象

        public event delegateMyEventHandler MyEvent;

 

        public void RaiseEvent()

        {

            MyEventArgs e = new MyEventArgs("helloword");

            //触发事件

            if (MyEvent != null)

            {

                MyEvent(this, e);

            }

        }

    }

 

    /// <summary>

    /// 事件订阅者

    /// </summary>

    internal class Subscribe

    {

        private string id;

 

        public Subscribe(string id, Publisher publisher1)

        {

            this.id = id;

            publisher1.MyEvent += new delegateMyEventHandler(publisher1_MyEvent);

        }

 

        /// <summary>

        /// 定义事件的处理方法

        /// </summary>

        public void publisher1_MyEvent(object sender, MyEventArgs myargs)

        {

            Console.WriteLine(id + "received message:{0}", myargs.Message);

        }

    }

 

    internal class Program

    {

        private static void Main(string[] args)

        {

            Publisher p1 = new Publisher();

            Subscribe s1 = new Subscribe("s1", p1);

            Subscribe s2 = new Subscribe("s2", p1);

            p1.RaiseEvent();

            Console.WriteLine("Press Enter to close this window.");

            Console.ReadLine();

        }

    }

}

 

原创粉丝点击