zoukankan      html  css  js  c++  java
  • .NET基础示例系列之六:委托及事件

    委托是一个类。

    定义委托时,实是定义一个用户自定义的类,它能代表具有相同参数列表和返回类型的任何方法,方法可以是静态方法或成员方法。示例:

    public partial class Form1 : Form

    {

        private void button1_Click(object sender, EventArgs e)

        {

            MyClass mc = new MyClass();

            mc.dlg = new MyDelegate(DlgMethod);

            mc.dlg += new MyDelegate(DlgMethod2);//多播

            mc.TriggerDlg();

        }

     

        private void DlgMethod(string s)

        {

            //do some work

            MessageBox.Show(s);

    }

     

        private void DlgMethod2(string s)

        {

            //do some work

            MessageBox.Show("multicast:"+s);

    }

    }

     

    public delegate void MyDelegate(string s);

     

    class MyClass

    {

        public MyDelegate dlg;

     

        public void TriggerDlg()

        {

            if (dlg != null)

            {

                dlg("param string for delegate");

            }

        }

    }

     

    事件是委托的一个实例。

    C#程序员参考手册》:C#使用一种委托模型来实现事件。事件的处理方法不必在将生成事件的类中定义。这种机制有许多优势。例如,它既有普遍性,又很灵活。设想应用程序中有两个按钮,但这两个按钮的作用不同。如果事件处理程序被绑定到事件源,我们可能必须写两个派生的按钮类,每个派生类有自己的事件处理程序。

    ……事件生成者把事件委托的一个实例定义为它的成员。事件消费者是那些希望在事件发生时得到通知的对象。它们定义将和事件委托关联的事件处理方法。当生成事件时,事件生成者通过调用事件委托“触发”事件。然后委托调用和它关联的事件处理方法。示例:

    public delegate void MyDelegate(string s);

     

    class MyClass

    {

        public event MyDelegate myEventHandler;

        public List<string> l;

     

        public MyClass()

        {

            l = new List<string>();

        }

     

        public void AddElement(string s)

        {

            l.Add(s);

            if (myEventHandler!=null)

            {

                myEventHandler("add element:"+s);

            }

        }

    }

     

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

     

        private void button1_Click(object sender, EventArgs e)

        {

            MyClass mc = new MyClass();

            mc.myEventHandler+=new MyDelegate(mc_myEventHandler);

            mc.AddElement("Book1");

        }

     

        private void mc_myEventHandler(string s)

        {

            MessageBox.Show(s);

        }

    }

  • 相关阅读:
    Android 的 ramdisk.img、system.img、userdata.img 作用说明,以及UBoot 系统启动过程
    Android启动过程以及各个镜像的关系
    程序员如何利用空余时间挣零花钱?
    hcharts实现堆叠柱形图
    [慕课笔记] node+mongodb建站攻略
    【每周一图】蜂鸟
    [慕课笔记]Node入口文件分析和目录初始化
    [慕课笔记] node+mongodb建站攻略
    hcharts实现堆叠柱形图
    程序员常用的六大技术博客类
  • 原文地址:https://www.cnblogs.com/morvenhuang/p/486940.html
Copyright © 2011-2022 走看看