摘要:
文中代码在VS2005下通过,由于VS2003(.Net Framework 1.1)不支持隐式的委托变量,所以如果在一个接受委托类型的位置直接赋予方法名,在VS2003下会报错,解决办法是显式的创建一个委托类型的实例(委托变量)。例如:委托类型 委托实例 = new 委托类型(方法名);欢迎浏览本文的后续文章:C#中的委托和事件(续)源码下载:http://www.tracefact.net/SourceCode/Delegates-and-Events-in-CSharp.rarC# 中的委托和事件引言委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事 阅读全文
摘要:
上篇文章介绍了C#中事件的基本实现方式,在本文中,将对最常见的事件委托EventHandler和EventHandler做介绍。事实上,在前面文章的介绍中,已经涉及到了EventHandler和EventHandler。在C# 2.0泛型出现之前,EventHandler对C#中最常见的事件处理函数进行了签名定义,它指代了这样一些函数,这些函数没有返回值,有两个参数,第一个参数的类型是object,而第二个参数的类型是EventArgs。在引入泛型之后,.NET Framework加入了EventHandler委托,与EventHandler不同的是,其第二个参数的类型由T指定,而且该类型必须 阅读全文
摘要:
前面简要介绍了委托的基本知识,包括委托的概念、匿名方法、Lambda表达式等,现在讲讲与委托相关的另一个概念:事件。事件由委托定义,因为事件的触发方(或者说发布方)并不知道事件的订阅方会用什么样的函数名称,这个函数名称由订阅方自己决定。假如不这样做,那么事件的订阅方必须公开一个专门用于处理事件的函数给事件触发方,由触发方在事件触发的时候调用这个函数。这样一来,触发方必须知道订阅方的细节,才能有效地触发事件,显然这是不合理的,触发方与订阅方耦合性太大了,不具备通用性。事实上,事件的触发方只需要确定好事件处理函数的签名即可。也就是说,触发方只需要定义在事件发生时需要传递的参数,而在订阅方,只需要根 阅读全文
摘要:
首先来看一个简单的例子:小明在烧水,等水烧开以后,将开水灌入热水瓶,然后开始整理家务小文在烧水,在烧水的过程中整理家务,等水烧开以后,放下手中的家务活,将开水灌入热水瓶,然后继续整理家务这也是日常生活中很常见的情形,小文的办事效率明显要高于小明。从C#程序执行的角度考虑,小明使用的同步处理方式,而小文则使用的异步处理方式。同步处理方式下,事务是按顺序一件一件处理的;而异步方式则是,将子操作从主操作中分离出来,主操作继续进行,子操作在完成处理的时候通知主操作。在C#中,异步通过委托来完成。请看下面的例子:view plaincopy to clipboardprint?classProgram 阅读全文
摘要:
委托是C#中最为常见的内容。与类、枚举、结构、接口一样,委托也是一种类型。类是对象的抽象,而委托则可以看成是函数的抽象。一个委托代表了具有相同参数列表和返回值的所有函数。比如:view plaincopy to clipboardprint?delegateintGetCalculatedValueDelegate(intx,inty);在上面的定义中,我们定义了一个委托,这个委托代表着一类函数,这些函数的第一个参数是整数型的x,第二个参数是整数型的y,而函数的返回值则是一个整数。在这里,为了描述方便,我们把这一类的函数称为具有相同签名(signature)的函数(注意:这个签名并不是数字签名 阅读全文
摘要:
1. 委托From: http://www.cnblogs.com/daxnet/archive/2008/11/08/1687014.html类是对象的抽象,而委托则可以看成是函数的抽象。一个委托代表了具有相同参数列表和返回值的所有函数。[csharp] view plaincopyprint?classProgram{delegateintCalculateDelegate(inta,intb);intadd(inta,intb){returna+b;}staticvoidMain(string[]args){CalculateDelegated=newProgram().add;//Ca 阅读全文
摘要:
本文将主要通过“同步调用”、“异步调用”、“异步回调”三个示例来讲解在用委托执行同一个“加法类”的时候的的区别和利弊。首先,通过代码定义一个委托和下面三个示例将要调用的方法:Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->/*添加的命名空间usingSystem.Threading;usingSystem.Runtime.Remoting.Messaging;*/ publicdelegateintAddHandler(inta,intb); 阅读全文
摘要:
简要介绍:1.定义异步执行需要调用的方法2.定义具有与异步执行方法相同签名的委托(Delegate);3.调用 BeginInvoke 和 EndInvoke 方法。 3.1. BeginInvoke 方法用于启动异步调用。它与需要异步执行的方法具有相同的参数, 只不过还有两个额外的参数。BeginInvoke 立即返回,不等待异步调用完成。 BeginInvoke 返回 IasyncResult,可用于监视调用进度。 3.2. EndInvoke 方法用于检索异步调用结果。调用 BeginInvoke 后可随时调用 EndInvoke 方法; 如果异步调用未完成,EndInvoke 将一直阻 阅读全文