C#委托与事件例子

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DelegateDemo
{
    /// <summary>
    /// 委托和事件的例子
    /// </summary>
    public class Program
    {
        public delegate void CompareDelegate(int a, int b);
        public static void CompareValue(int a, int b)
        {
            Console.Write((a > b).ToString() + "委托例子结束\r\n");
        }

        public static void Main(string[] args)
        {
            //委托
            CompareDelegate cd = new CompareDelegate(Program.CompareValue);
            cd(6, 3);

            //事件
            MyButton btn = new MyButton();
            btn.MyOnClick +=new ClickHandler(btn_OnClick);
            btn.Click("系统本人");
        }

        public static void btn_OnClick(object sender, ButtonClickArgs e)
        {
            Console.WriteLine(e._clicker + "触发了事件");
            Console.Read();
        }
    }

    

    /*事件部分*/
    //定义一个delegate委托事件
    public delegate void ClickHandler(object sender, ButtonClickArgs e);
    public class MyButton
    {
        //定义事件,类型为上面定义的ClickHandler委托
        public event ClickHandler MyOnClick;
        public void Click(string clicker)
        {
            //...触发之前可能做了n多操作
            //.....

            ButtonClickArgs e = new ButtonClickArgs(clicker);
            //这时触发Click事件,并传入参数Clicker为本博主ivy
            OnClick(e);
        }

        //这里使用保护类型的虚方法主要有以下好处:
        //可供继承类重写方法,可以在子类中不实现事件触发操作
        protected virtual void OnClick(ButtonClickArgs e)
        {
            if (MyOnClick != null)
            {
                MyOnClick(this, e);
            }
        }
    }

    //自定义事件参数
    public class ButtonClickArgs : EventArgs
    {
        public string _clicker;
        public ButtonClickArgs() { }
        public ButtonClickArgs(string sclicker)
        {
            _clicker = sclicker;
        }
        public string Clicker
        {
            get { return _clicker; }
        }
    }
}

 

posted @ 2015-10-04 22:49  从小就喜欢编程  阅读(74)  评论(0)    收藏  举报