正文

学习C#委托用法的体会2007-02-12 01:08:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/goalbell/23232.html

分享到:

委托是一种可以把引用封装成命名或者匿名函数的类型.委托的声明制定了一个函数签名,其中包含一个返回类型和参数列表.示例:delegate void SampleDelegate(string message).这里声明要用到关键字delegate.接着声明该委托类型的变量,初始化这个变量为与委托有相同签名的函数引用.最后可以使用委托变量调用这个函数.     下面来说一下与委托有关联的命名函数与匿名函数:当你用一个命名方法来实例化一个委托的时候,该方法会作为一个参数来传递,示例:      //声明一个委托       delegate void Del(int x);      //定义一个命名函数      void DoWork(int k)        { /*                  */}       //使用该命名方法作为参数来实例化委托        Del d=obj.DoWork;      以下给出完整的示例://声明一个委托delegate void Del(int i,double j);class MathClass{   //声明相同签名的函数   void MultiplyNumbers(int m,double n)   {         Console.WriteLine(m*n+" ");   }         static void Main()   {          MathClass m=new MathClass();//实例化类的对象          //使用"MultiplyNumbers"来实例化委托           Del d=m.MultiplyNumbers;           //调用委托对象d           Console.WriteLine("Invoking the delegate using 'MultiplyNumbers':");           for(int i=1;i<=5;i++)           {                d(i,2);           }                }显示结果:Invoking the delegate using 'MultiplyNumbers':2 4 6 8 10  创建匿名方法实质上作为一个委托参数传递给一个代码块.示例://创建一个委托实例delegate void Del(int x);//用匿名方法来实例化委托Del d=delegate(int k){/*......*/};由于使用匿名方法来实例化委托能够减少代码的开销,因为可以消除创建不同方法的需要.示例:  Using System.Threading         void StartThread()        {               Thread t1=new Thread                (delegate()                          {                             System.Console.WriteLine("Hello");                             System.Console.WriteLine("World!");                         });                    t1.Start();     }下面通过两种方法来实例化委托,并且当委托被调用时,显示相应的信息://实例化一个委托delegate void Printer(string s)class TestClass{   static void Main()   {              //使用匿名方法来实例化委托               Printer p=delegate(string j)                {                   Console.WriteLine(j);                 } ;                //匿名委托调用的结果                p("The delegate using the anonymous method is called.");                //使用命名方法来实例化委托               p=new Printer(TestClass.DoWork);              //命名委托调用的结果   p("The delegate using the named method is called.");              //定义命名委托相关的方法              static void DoWork(string k)              {                    Console.WriteLine(k);               }      }}

阅读(3878) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册