C# 委托和事件

2021-01-11 21:32

阅读:355

标签:eth   oid   返回值   一段   函数赋值   ati   指定   null   匿名函数   

委托简介

  • 委托是一种数据类型,像类一样的数据类型,一般直接在命名空间中定义
  • 定义委托时,使用关键字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();

 

C# 委托和事件

标签:eth   oid   返回值   一段   函数赋值   ati   指定   null   匿名函数   

原文地址:https://www.cnblogs.com/sunhouzi/p/12264370.html


评论


亲,登录后才可以留言!