zoukankan      html  css  js  c++  java
  • 委托的简单用法

    委托的用法简单示例一

    usercontrols:里面写法如下:
    public delegate void ButtonClickHandler();
    public event ButtonClickHandler ButtonClick;
    form1里面定义时间:
    this.usercontrols.ButtonClick += new UserControl.UserMngControls.UserLogin.ButtonClickHandler(this.usercontrols _ButtonClick);
    private void userLogin1_ButtonClick()
    {
       MessageBox.Show(this.userLogin1.MReturn.ToString());
    }

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/liang4571231/archive/2008/12/02/3426411.aspx

    委托的用法简单示例二
    using System;
    using System.Collections.Generic;
    using System.Text;
    //函数作用:委托的用法
    namespace ConsoleApplication21
    {
        class Program
        {
            delegate double testDelegate(double x, double y);//创建委托,并且返回值为double

            static double Multiply(double x, double y) //创建函数
            {
                return x * y;
            }

            static double Divide(double x, double y)
            {
                return x / y;
            }

            static void Main(string[] args)
            {
                testDelegate selectAction; //声明
                Console.WriteLine("请输入2个数字!用“,”隔开");
                string getnum = Console.ReadLine();
                int zz = getnum.IndexOf(',');
                double num1 = Convert.ToDouble(getnum.Substring(0,zz));
                double num2 = Convert.ToDouble(getnum.Substring(zz + 1, getnum.Length - zz - 1));
                Console.WriteLine("请选择操作,m or d ");
                string act = Console.ReadLine().ToLower();
                if (act == "m")//这里根据选择初始化委托变量
                { selectAction = new testDelegate(Multiply); }//这里即选择哪个函数执行委托
                else
                { selectAction = new testDelegate(Divide); }
                Console.WriteLine("运算结果:{0}", selectAction(num1,num2));//让委托调用所选函数,并执行
            }
        }
    }


    委托的用法简单示例三
    使用一个委托的过程是声明委托类型〉声明这个类型委托的一个实例〉调用委托。您可以参考下面的代码:

    using System;

    public class EntryPoint
    {
    public static void Main()
    {
    myclass.MyDelegate mydelegate = new myclass.MyDelegate(OutPut);//声明一个委托变量并用适当方法初始化它

    myclass.CallReadLine(mydelegate);
    }

    public static void OutPut()//这个是委托调用的方法,“回调函数”
    {
    Console.WriteLine("User had inputed something!");
    }
    }

    public class myclass
    {
    public delegate void MyDelegate();//声明了一个委托类型

    public static void CallReadLine(MyDelegate e)//这里把委托当作方法的参数
    {
    Console.ReadLine();

    e();//如果用户输入了内容,就执行委托。
    }
    }

    委托的用法简单示例四
    委托是一种可以把引用封装成命名或者匿名函数的类型.委托的声明制定了一个函数签名,其中包含一个返回类型和参数列表.示例: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);
                   }
         }
    }

  • 相关阅读:
    INFORMIX体系效能改善第一步
    Ubuntu判袂率不正常的一种复杂治理措施
    ubuntu8.04分区分配方案
    计算机启动更快的十五招
    理顺 JavaScript (13) 对象及 json
    获取指定地址的 JPG 图片 回复 "bangrj" 的问题
    理顺 JavaScript (14) constructor 与 instanceof
    理顺 JavaScript (9) Date 类
    用 API 提取、写入指定网站的 Cookie 回复 "bangrj" 的问题
    理顺 JavaScript (10) Math 类
  • 原文地址:https://www.cnblogs.com/xcj26/p/1790923.html
Copyright © 2011-2022 走看看