正在阅读:介绍.NET中的委派(Delegates)之二介绍.NET中的委派(Delegates)之二

2004-02-14 09:34 出处: 作者:赵湘宁 责任编辑:pjl
使用委派调用静态方法   StaticCallbacks方法示范了用各种不同方式的回调委派。这个方法首先构造一个Set对象,告诉它对象创建有五个对象元素的数组。然后调用ProcessItems,在第一个调用中,它的feedback参数为null。ProcessItems呈现一个方法,这种方法为每一个Set操纵的项目实现某种动作。在第一个例子中,因为feedback参数是null,在处理每一个项目时不调用任何回调方法。   第二个例子中创建了一个新的Set.FeedBack委派对象,这个委派对象是一个方法包装器,允许方法的调用是经由这个包装器间接调用。对于类型FeedBack的构造器来说,方法的名字(App.FeedBackConsole)被作为构造器的参数传递;这就表示方法被包装。然后,从new操作符返回的引用被传到ProcessItems。现在,当执行ProcessItems时,它会调用App类型的FeedbackToConsole方法处理集合中的每一个项目。FeedbackToConsole简单地将一个串输出到控制台,表示哪个项目被处理了以及这个项目的值是什么。   第三个例子与第二个例子基本相同。唯一的差别是Feedback委派对象包装的是另一个方法:App.FeedbackToMsgBox。这个方法建立一个串,用这个串表示哪个项目被处理以及这个项目的值是什么。然后将这个串显示在一个信息框中。   第四个例子也是静态调用的最后一个例子示范了如何将委派链接在一起形成一个链。在这个例子中,首先创键一个Feedback委派对象的引用变量fb,并将它初始化为null。这个变量指向委派链表的头。Null值表示链表中没有节点。然后,构造Feedback委派对象,由这个对象包装对App FeedbackToConsole方法的调用。C#中,+=操作符被用于将对象添加到fb引用的链表中。Fb此时指向链表的头。   最后,构造另一个Feedback委派对象,由这个对象包装对App FeedbackToMsgBox方法的调用。C#中的+=操作符又一次被用于将对象添加到fb引用的链表中,并且fb被新的链表的头更新。现在,当执行ProcessItems时,传递给它的是Feedback委派链表的头指针。在ProcessItems内部,调用回调方法的代码行实际上终止调用所有的在链表中由委派对象包装的回调方法。也就是说,对于被迭代的每一个项目,都会调用FeedbackToConsole,接着马上调用FeedbackToMsgBox。在后续文章中我将详细讨论委派链的处理机制。   有一点很重要,那就是在这个例子中每件事情都是类型安全的,例如,当构造Feedback委派对象时,编译器保证App的FeedbackToConsole和FeedbackToMsgBox方法都具备确切的原型,像由Feedback委派定义的一样。既两个方法必须有三个参数(Object,Int32和Int32),并且两个方法必须有相同的返回类型(void)。如果方法原型不匹配,则编译器将发出下面的出错信息:“error CS0123:The signature of method ’App.FeedbackToMsgBox()’ does not match this delegate type。”——意思是App.FeedbackToMsgBox()方法的签名与委派的类型不匹配。
键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品