您的位置:首页 > 编程语言 > C#

C#:代表(delegate)和事件(event) (转)

2009-05-26 19:11 423 查看
C#:代表(delegate)和事件(event) (转)
代表(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类要对他进行处理,输出一条信息“我知道你被单击了”

请看下图:



首先我们会单击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,来包装你要传送的其他任何参数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: