热门关键字:  PHP  Cisco  seo  网络广告 虚拟主机 中文域名
当前位置 :| 主页>编程开发>ASP.NET>C#语言>

C#中的委托和事件

来源:blog.csdn.net 作者: 时间:2008-06-25 点击:

既然给委托可以绑定一个方法,那么也应该有办法取消对方法的绑定,很容易想到,这个语法是“-=”:

以下为引用的内容:  static void Main(string[] args)

 {

        GreetingDelegate delegate1 = new GreetingDelegate(EnglishGreeting);

        delegate1 += ChineseGreeting;

       // 给此委托变量再绑定一个方法
       // 将先后调用 EnglishGreeting 与 ChineseGreeting 方法

        GreetPeople("Jimmy Zhang", delegate1);

        Console.WriteLine();

       delegate1 -= EnglishGreeting;

       //取消对EnglishGreeting方法的绑定

        // 将仅调用 ChineseGreeting

        GreetPeople("张子阳", delegate1);

              Console.ReadKey();

 }
 


输出为:

Morning, Jimmy Zhang

早上好, Jimmy Zhang

早上好, 张子阳

  让我们再次对委托作个总结:

  使用委托可以将多个方法绑定到同一个委托变量,当调用此变量时(这里用“调用”这个词,是因为此变量代表一个方法),可以依次调用所有绑定的方法。

  事件的由来

  我们继续思考上面的程序:上面的三个方法都定义在Programe类中,这样做是为了理解的方便,实际应用中,通常都是 GreetPeople 在一个类中,ChineseGreeting和 EnglishGreeting 在另外的类中。现在你已经对委托有了初步了解,是时候对上面的例子做个改进了。假设我们将GreetingPeople()放在一个叫GreetingManager的类中,那么新程序应该是这个样子的:

以下为引用的内容: namespace Delegate

{       

//定义委托,它定义了可以代表的方法的类型

        public delegate void GreetingDelegate(string name);

              //新建的GreetingManager类

        public class GreetingManager

{

               public void GreetPeople(string name, GreetingDelegate MakeGreeting)

{

                      MakeGreeting(name);

              }

               }
       class Program

{

               private static void EnglishGreeting(string name)

 {

                      Console.WriteLine("Morning, " + name);

               }

              private static void ChineseGreeting(string name)

{

                      Console.WriteLine("早上好, " + name);

               }

              static void Main(string[] args)

 {

                      // ... ...

               }

        }

 }
 


  这个时候,如果要实现前面演示的输出效果,Main方法我想应该是这样的:

以下为引用的内容: static void Main(string[] args) {

        GreetingManager gm = new  GreetingManager();

        gm.GreetPeople("Jimmy Zhang", EnglishGreeting);

        gm.GreetPeople("张子阳", ChineseGreeting);

 }
 


我们运行这段代码,嗯,没有任何问题。程序一如预料地那样输出了:

Morning, Jimmy Zhang

早上好, 张子阳

  现在,假设我们需要使用上一节学到的知识,将多个方法绑定到同一个委托变量,该如何做呢?让我们再次改写代码:

以下为引用的内容:  static void Main(string[] args)
 {

        GreetingManager gm = new  GreetingManager();

        GreetingDelegate delegate1;

        delegate1 = EnglishGreeting;

        delegate1 += ChineseGreeting;

       gm.GreetPeople("Jimmy Zhang", delegate1);

}
 
 
输出:

Morning, Jimmy Zhang

早上好, Jimmy Zhang


最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
赞助商连接