zoukankan      html  css  js  c++  java
  • C# 委托基本知识

    委托简介

    • 委托是一种数据类型,像类一样的数据类型,一般直接在命名空间中定义
    • 定义委托时,使用关键字delegate,需要指定返回值类型、委托名称、参数列表

    委托的使用

    • 声明委托变量并赋值
    • 委托是一个引用类型,可以为null,所以使用时候尽量先做非空验证
    • 委托类型的变量只能赋值一个委托类型的对象(方法)

    委托应用范围

    • 在程序中,有一段代码需要根据引用者不同而做出不同的判断,有时候我们会用 if 判断做这个需求,但是 if 判断是需要知道值的范围才能做出判断,万一要是都不知道调用者会穿什么值进来怎么办,这时候就可以使用委托,让调用者自己决定这段代码写什么,怎么写

    实际应用

    定义委托

    // 定义一个无参数无返回值的委托
    delegate void MyDelegate();
    // 定义一个有参数无返回值的委托
    delegate void MyDelegate1(string msg);
    // 定义一个无参数有返回值的委托
    delegate string MyDelegate2();
    // 定义一个有参数有返回值的委托
    delegate string MyDelegate3(string msg);

    定义委托

    // 定义无参数无返回值的委托变量 将一个无参数无返回值的方法赋值给委托
    MyDelegate m1 = new MyDelegate(Method);
    // 使用以上方式和使用以下方式相同
    MyDelegate m2 = Method; 
    // 定义一个有参数有返回值的委托变量,将一个有参数有返回值的方法赋值给委托
    MyDelegate3 m3 = Method1;
    // 定义无参数无返回值的委托变量 将一个无参数无返回值的匿名函数赋值给委托
    MyDelegate m4 = delegate()
    {
        Console.WriteLine("无参数无返回值的匿名函数");
    };
    // 定义一个有返回值的委托变量 将一个有参数有返回值的匿名函数赋值给委托
    MyDelegate3 m5 = delegate(string msg)
    {
        return "有参数有返回值的匿名函数" + msg; 
    
    };
    // 定义一个无参数无返回值的委托变量 将一个无参数无返回值的lambda表达式赋值给委托
    MyDelegate m6 = () =>
    {
        Console.WriteLine("无参数无返回值的lambda表达式");
    
    };
    // 定义一个有参数有返回值的委托变量 将一个有参数有返回值的lambda表达式赋值给变量
    MyDelegate3 m7 = (msg) =>
    {
        return "有参数有返回值的lambda表达式";
    
    };

    定义委托中使用到的方法

    static void Method()
    {
        Console.WriteLine("无参数无返回值的方法");
    }
    
    static string Method1(string msg)
    {
        return "有参数有返回值的方法:" + msg;
    }

    调用委托

    // 调用委托
    m1();
    // 使用以下方式和上面的调用方式相同
    m1.Invoke();
  • 相关阅读:
    poj 2251 Dungeon Master-搜索进阶-暑假集训
    棋盘问题-POJ 1321
    Popular Cows
    The Factor
    整数解 (hdu 2092
    Strange fuction hdu 2899
    Factors and Multiples
    Trailing Zeroes (III) -;lightoj 1138
    Swap——hdu 2819
    Arithmetic Sequence
  • 原文地址:https://www.cnblogs.com/sunhouzi/p/12264370.html
Copyright © 2011-2022 走看看