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

 

使用系统提供的委托

无返回值:Action<参数1, 参数2>

有参数有返回值:Func<参数1,参数2,返回值>

示例代码:

static void Main(string[] args)
{
    // 无返回值
    Action m1 = M1;
    m1();

   // 无参数,返回值为string Func
<string> b1 = M2; Console.WriteLine(b1());
   // 有两个参数为int,返回值也是int Func
<int,int,int> a1 = coumt; Console.WriteLine(a1(1, 2)); Console.ReadLine(); } static void M1() { Console.WriteLine("M1"); } static string M2() { return "M2"; } static int coumt(int x,int y) { return x + y; }

 

posted @ 2020-02-10 08:46  Simian_2018_12_22  阅读(197)  评论(0编辑  收藏  举报