« | July 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | |
| 公告 |
☆★☆★☆★☆★☆★☆ 生活的点点记录,以及一些体会...........
喜欢是淡淡的爱,爱是深深的喜欢.
时间会见证一切.......................
欢迎大家指出错误,共同进步..........
期待中..............................
☆★☆★☆★☆★☆★☆ |
Blog信息 |
blog名称: 日志总数:162 评论数量:312 留言数量:0 访问次数:939675 建立时间:2005年5月17日 |

| |
[读书笔记]C#:代表(delegate)和事件(event) (转) 文章收藏
oceanblue 发表于 2009/3/22 21:01:06 |
代表(delegate):
它是C#语言里面的函数指针,代表可以指向某一个函数,在运行的时候调用这个函数的实现。下面来看看它的实现步骤:
声明一个delegate对象。
实现和delegate具有相同参数和返回值的函数实现(可以是静态和非静态的)。
产生一个delegate对象的时候,把你刚刚实现的函数作为参数传给他的构造函数。
请看下面例子:
using System;using System.Collections.Generic;using System.Text;
namespace UsingDelegate{ public delegate void MyDelegate(string mydelegate);//声明一个delegate对象
public class TestClass {
//实现有相同参数和返回值的函数 public void HelloDelegate(string mydelegate) { Console.WriteLine(mydelegate); }
//实现有相同参数和返回值的静态函数
public static void HelloStaticDelegate(string mystaticdelegate) { Console.WriteLine(mystaticdelegate); } }
class Program { static void Main(string[] args) { TestClass testClass = new TestClass(); MyDelegate mydelegate = new MyDelegate(testClass.HelloDelegate);//产生delegate对象 mydelegate("Hello delegate");//调用
MyDelegate myStaticDelegate = new MyDelegate(TestClass.HelloStaticDelegate);//产生delegate对象 myStaticDelegate("Hello static delegate");//调用 } }}
事件(event):
让我通过一个例子来模拟事件的整个过程:
创建一个button类,它里面有一个click 事件。
创建一个Form类,他里面有一个我们上面定义的button类。
要求:当我们用户单击button类的时候From类要对他进行处理,输出一条信息“我知道你被单击了”
请看下图:
500)this.width=500'>
首先我们会单击button,然后button会通知Form,然后From就作出相应。这个过程在C#里面应该怎么做到呢?
下面我会列出上述例子的源代码(这里就不介绍怎么声明event等等内容了):
using System;using System.Collections.Generic;using System.Text;
namespace UsingEvent{ public delegate void ClickEventHandler(object sender, EventArgs e);//声明一个代表:请看文章最后面Note
public class MyButton //创建MyBottom { public event ClickEventHandler ClickEvent;//声明一个事件
public void Click() //单击MyButton { if (ClickEvent != null) { Console.WriteLine("MyButton: 我被单击了"); ClickEvent(this, null); //抛出事件,给所有相应者 } } }
public class MyForm { public MyButton myButton = new MyButton();
public MyForm() {
//添加事件到myButton中,当myButton被单击的时候就会调用相应的处理函数 myButton.ClickEvent += new ClickEventHandler(OnClickEvent);
}
//事件处理函数
void OnClickEvent(object sender, EventArgs e) { Console.WriteLine("MyForm: 我知道你被单击了!"); } }
class Program { static void Main(string[] args) { MyForm form = new MyForm();//生成一个MyForm
form.myButton.Click();//单击MyForm中的鼠标,效果就出来了 } }}
Note:public delegate void ClickEventHandler(object sender, EventArgs e);这是事件委托标准的声明方法,其实在参数里面我们可以不传,也可以是其他类型的。但是最好还是使用上面的声明方法,你可以继承EventArgs,来包装你要传送的其他任何参数。 |
|
|