C#中的委托和事件 浅析

由于工作的需要,需要采用.net做法开发工具,在习惯了c++,转向C#的过程中,遇到了两个概念,就是委托和事件。拿一个例子来说,当在C#中,主线程中创建了一个界面,子线程中从网络上接收数据,那么要想在子线程中更新主线程的界面,这就需要用到委托了。闲话少续,在网上查阅了一些资料后,将本人对委托和事件的理解记下,和大家共勉。

1. 什么是委托

事实上,熟悉C的人肯定都对函数指针并不陌生,在c中通过函数指针可以增加程序的灵活性。比如以下的应用:

 typedef void (*GreetingPtr)(string strName); //定义一个函数指针

 void ChineseGreeting(string strName) //具体的两个函数
 {
	 cout<<"早上好" <<strName.c_str()<<endl;
 }

 void EnglishGreeting(string strName)
 {
	 cout<<"Good Moring" << strName.c_str()<<endl;
 }

 void GreetingPeople(string strName, GreetingPtr Greet) //客户端调用
 {
	 Greet(strName);
 }

int _tmain(int argc, _TCHAR* argv[])
{
	GreetingPeople("小满", ChineseGreeting);
	GreetingPeople("小满", EnglishGreeting);
	return 0;
}
      可以看出我们定义了一个函数指针,typedef void (*GreetingPtr)(string strName), 该函数指针指向返回值为空,并且有一个参数的函数,也就是我们定义的
ChineseGreeing和EnglishGreeting函数.另外我们定义了一个函数GreetIngPeople,供客户端调用,它接收两个函数,一个是字符串型参数,一个就是函数指针。这样客户端在调用的过程中,通过函数指针从而确定究竟是EnglishGreeting被执行还是ChineseGreeting被执行。这样做可以增加程序的灵活性。

	介绍完了函数指针我们言归正传,说委托了,事实上委托和上面的函数指针的概念基本上是相同的,废话少说我们写一个例子,然后和上面的进行对比。
	public delegate void GreetingEventHandler(string strName); //我们定义一个委托,对应着上面的函数指针
	public class Programm
	{
		public static void GreetingPeople(string strName, GreetingEventHandler Greet)
		{
			Greet(strName);
		}
		public static ChineseGreeting(string strName)
		{
			Console.Writeline("早上好" + strName);
		}
		publics static EnglishGreeting(string strName)
		{
			Console.Wringline("GoodMoring " + strName);
		}
		static void main(string [] args)
		{
			GreetingPeople("小满", ChineseGreeting);
			GreetingPeople("小满), EnglishGreeting);
		}
	}
	通过上面的代码对比,我们可以看出,除了函数指针和委托的声明方式不一样,其他都是一样的。事实上委托更加灵活一些,比如我们可以进行如下的委托操作。
			GreetingEventHandler g1;//定义一个委托
			GreetingEventHander  g2;
			g1 = ChineseGreeting;
			g2 = EnglishGreeting;
			GreetingPeople("小满", g1);
			GreetingPeople("小满", g2);
	其运行结构和上面完全一样。
	事实上,委托更加灵活的特点是可以给一个委托绑定多个函数,如下代码所示:
			GreetingEventHandler g1;
			g1 = ChineseGreeting; //赋值
			g1 += EnglishGreeting;//绑定
			GreetingPeople("小满", g1);//这样在执行这句话的时候,就会一次执行了ChineseGreeting和 EnglishGreeting.怎么样很神奇吧。
	2 在不同的类中使用委托
	事实上,上面所示的都是在同一个类中使用委托


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值