zoukankan      html  css  js  c++  java
  • 委托声明及调用

    //委托的声明
    public delegate void NoReturnNoPara();
    public delegate void NoReturnWithPara(int x,int y);
    public delegate string NoPara();
    public delegate DateTime WithPara(string name,int size);
    
    
    NoReturnWithPara method = new NoReturnWithPara(ShowAdd);
    //因为在静态类中,所以调用的也必须为静态类 //调用的也必须跟其声明时的返回类型和参数必须一致 NoReturnWithPara method1 = ShowAdd; // 可以直接将方法赋值给声明的委托 method.Invoke(4, 3);//委托的调用1 method(4, 5);//委托的调用2 method.BeginInvoke(6, 7, null, null);//异步调用 public static void ShowAdd(int x,int y) { Console.WriteLine("这里是ShowAdd x = {0} y = {1}",x,y); }
    *************************************************************************
    委托可用于解耦
    例子,如遇见人打招呼时,分为美国人和中国人,说话的方式不一样
    那么普通方法遍如下:
    public static void Greeting(string name,PeopleType type)//传递值,根据值来决定行为
    {
    if(type == PeopleType.Chinese)
    {
    Console.WriteLine("{0},早上好!", name);
    }
    else if(type == PeopleType.English)
    {
    Console.WriteLine("{0},Good Morning!", name);
    }
    else
    {
    throw new Exception("wrong PeopleType");
    }
    }
    public enum PeopleType
    {
    Chinese,
    English
    }
    View Code
    而我们可以通过委托来传递第二个参数值,这样我们扩展时,只需在GreetingClass类中添加方法,并对应调用就行。
    GreetingHandler handler = new GreetingHandler(GreetingClass.GreetingEnglish);
    public static void GreetingChinese(string name)//方法1的声明,即调用的参数
    {
    Console.WriteLine("{0},早上好!", name);
    }
    public static void GreetingEnglish(string name)//方法2的声明,即调用的参数
    {
    Console.WriteLine("{0},Good Morning!", name);
    }
    
    public static void Greeting(string name,GreetingHandler handler)//传个方法给我,我去执行
    {
    handler.Invoke(name);
    }
    
    public delegate void GreetingHandler(string name);//委托声明
    
    GreetingHandler handler = new GreetingHandler(GreetingClass.GreetingEnglish);//调用,GreetingClass.GreetingEnglish,GreetingClass类下的GreetingEnglish方法
    GreetingClass.Greeting("韩非子", handler);
    View Code
  • 相关阅读:
    django Highcharts制作图表--显示CPU使用率
    django--ajax的使用,应用
    Selenium&Pytesseract模拟登录+验证码识别
    django Highcharts制作图表--显示CPU使用率
    django--ajax的使用,应用
    斗鱼直播招聘测试总监
    腾讯自动化测试的AI智能
    转载Linq中GroupBy方法的使用总结
    转载.NET 4.0中的泛型的协变和逆变
    转载c#泛型 类型参数的约束(c#编程指南)
  • 原文地址:https://www.cnblogs.com/cn-blog-cn/p/6476128.html
Copyright © 2011-2022 走看看