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);

    }

    }

  • 相关阅读:
    $.ajax()方法详解(转)
    ajax(异步页面动态刷新)
    二阶段项目总结
    (转)Java字符串转日期或日期转字符串
    (转)java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)
    Serblet 过滤器(Filter)
    延迟加载
    Junit测试错误:### Error building SqlSession
    MyEclipse下Junit报错"The input type of the launch configuration"
    mybatis逆向工程
  • 原文地址:https://www.cnblogs.com/jx270/p/2919770.html
Copyright © 2011-2022 走看看