c#中的委托是什么,事件是不是一种委托

委托是一种在对象里保存方法引用的类型,同时也是一种类型安全的函数指针。
 给你举个例子:
 //声明一个委托,这里的NewDelegate()可以理解为是之后用来取方法的一个类型。
 delegate void NewDelegate();
 //下面定义的a,b两种方法,你可以理解为NewDelegate这个类型的两个实例。
 public void a(){};
 public void b(){};
 public void main()
 {
 NewDelegate dgt1=new NewDelegate(a);
 NewDelegate dgt2=new NewDelegate(b);
 //dgt1指向方法a,dgt2指向方法b。也就是说一个方法的返回值和参数类型数量与声明的委托
 //相符时,就可以用一个委托来调用这个方法。而这个方法的名称作为参数传递给实例化的那个委托
 }

事件是一种特殊的委托,为什么这么说呢?
 用反编译工具反编译.net framework即可发现,事件的定义(这里只是举其中一种事件的定义,事件的参数在类库中定义有区别),如下:
 public delegate void EventHandler(object sender, EventArgs e);
 而常见的各种控件的Click事件是如何定义的呢?
 public event EventHandler Click;
 说明 Click事件是一个委托
 而我们常见的一个Button控件添加一个事件是怎么做的呢?
 PageLoad里:Button1.Click+=new EventHandler(Button1_Click);
 定义Button1的事件 protected Button1_Click(object sender,EventArgs e){}
 如你所见,这是一个很典型的委托调用。 
时间: 2024-10-14 08:34:06

c#中的委托是什么,事件是不是一种委托的相关文章

C#中的委托(Delegate)和事件(Event)

C#中的委托(Delegate)和事件(Event) 2007-11-30 11:40:00 分类: 把C#中的委托(Delegate)和事件(Event)放到现在讲是有目的的:给下次写的设计模式——观察者(Observer)有一个参考. 委托和事件应该是C#相较于C++等之前的非托管的语言提出的一个新的术语(term).“旧瓶装新酒”这样的描述似乎有些“贬义”,但确实是这样.委托也好,事件也好最初的起源是C/C++中的函数指针,关于函数指针的简单介绍可以参见我以前的一篇<C/C++中指向函数的

C# 中的委托和事件

http://www.cnblogs.com/JimmyZhang/archive/2007/09/23/903360.html 文中代码在VS2005下通过,由于VS2003(.Net Framework 1.1)不支持隐式的委托变量,所以如果在一个接受委托类型的位置直接赋予方法名,在VS2003下会报错,解决办法是显式的创建一个委托类型的实例(委 托变量).例如:委托类型 委托实例 = new 委托类型(方法名); 欢迎浏览本文的后续文章: C#中的委托和事件(续) 引言 委托 和 事件在

C#中的委托和事件(续)

C#中的委托和事件(续) 引言 如果你看过了 C#中的委托和事件 一文,我想你对委托和事件已经有了一个基本的认识.但那些远不是委托和事件的全部内容,还有很多的地方没有涉及.本文将讨论委托和事件一些更为细节的问题,包括一些大家常问到的问题,以及事件访问器.异常处理.超时处理和异步方法调用等内容. 为什么要使用事件而不是委托变量? 在 C#中的委托和事件 中,我提出了两个为什么在类型中使用事件向外部提供方法注册,而不是直接使用委托变量的原因.主要是从封装性和易用性上去考虑,但是还漏掉了一点,事件应该

(转)C# 中的委托和事件

C# 中的委托和事件 引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里别(biè)得慌,混身不自在.本文中,我将通过两个范例由浅入深地讲述什么是委托.为什么要使用委托.事件的由来..Net Framework中的委托和事件.委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论. 将方法作为方法的参

C#中的委托与事件并存的理由

问题 有了委托为什么还要有事件? 理论上,事件能完成的事情委托完全可以胜任,但是我们思考的这一方面是功能性,我们必须从他们各自的特点分析. 委托链的特点让事件能够被多个订阅方订阅,事件是带上了event关键字的委托,在用reflector反编译事件源码时,我 们看到事件成员的可访问性被始终设置为private,其订阅和移除事件靠方法来完成. 所以,他们的区别出现了: 委托可被任意调用者修改,甚至抹去所有的委托连,而对于事件,只能由订阅者自己决定订阅或者移除事件. 事件的密封性较好,他从本质层面上

C# 中的委托和事件详解

C# 中的委托和事件 文中代码在VS2005下通过,由于VS2003(.Net Framework 1.1)不支持隐式的委托变量,所以如果在一个接受委托类型的位置直接赋予方法名,在VS2003下会报错,解决办法是显式的创建一个委托类型的实例(委托变量).例如:委托类型 委托实例 = new 委托类型(方法名); 引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易

C# 中的委托和事件(1)

引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里别(biè)得慌,混身不自在.本文中,我将通过两个范例由浅入深地讲述什么是委托.为什么要使用委托.事件的由来..Net Framework中的委托和事件.委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论. 将方法作为方法的参数 我们先不管这个标题

C# 中的委托和事件(2)

委托.事件与Observer设计模式范例说明 上面的例子已不足以再进行下面的讲解了,我们来看一个新的范例,因为之前已经介绍了很多的内容,所以本节的进度会稍微快一些: 假设我们有个高档的热水器,我们给它通上电,当水温超过95度的时候:1.扬声器会开始发出语音,告诉你水的温度:2.液晶屏也会改变水温的显示,来提示水已经快烧开了. 现在我们需要写个程序来模拟这个烧水的过程,我们将定义一个类来代表热水器,我们管它叫:Heater,它有代表水温的字段,叫做temperature:当然,还有必不可少的给水加

深刻理解:C#中的委托、事件

C#中的事件还真是有点绕啊,以前用JavaScript的我,理解起来还真是废了好大劲!刚开始还真有点想不明白为什么这么绕,想想和JS的区别,最后终于恍然大悟! C#中事件绕的根本原因: C#的方法,它不是一个类型,它只是其它类型的成员: C#是一个强类型的语言,定义方法时,它的参数必须指定类型,如 public void add(int n){...}; 所以,一个方法不能直接作为其它方法的参数,把一个方法名作为参数,无法指定类型啊,会报错!那我就想啊,既然不能直接传入,那我传入整个对象总可以吧