博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
委托的简单用法
阅读量:5955 次
发布时间:2019-06-19

本文共 3427 字,大约阅读时间需要 11 分钟。

委托的用法简单示例一

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博客,转载请标明出处:

委托的用法简单示例二

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);
               }
     }
}

你可能感兴趣的文章
Kafka服务端脚本详解(1)一topics
查看>>
js中var self=this的解释
查看>>
js--字符串reverse
查看>>
面试题
查看>>
Facebook 接入之获取各个配置参数
查看>>
linux的日志服务器关于屏蔽一些关键字的方法
查看>>
事情的两面性
查看>>
只要会营销,shi都能卖出去?
查看>>
sed单行处理命令奇偶行输出
查看>>
走向DBA[MSSQL篇] 从SQL语句的角度 提高数据库的访问性能
查看>>
VC++深入详解学习笔记1
查看>>
安装配置discuz
查看>>
CentOS7 64位小型操作系统的安装
查看>>
线程互互斥锁
查看>>
KVM虚拟机&openVSwitch杂记(1)
查看>>
win7下ActiveX注册错误0x80040200解决参考
查看>>
《.NET应用架构设计:原则、模式与实践》新书博客--试读-1.1-正确认识软件架构...
查看>>
2013 Linux领域年终盘点
查看>>
linux学习之查看程序端口占用情况
查看>>
相逢在栀枝花开的季节
查看>>