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