委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。
使用委托:
1、定义委托类型
[访问修饰符]delegate 返回类型 委托名(形参)
2、声明委托对象
委托名 委托实例名
3、创建委托对象
委托实例名 = new 委托名(某个类的方法)
4、使用委托调用方法
委托实例名(实参)
delegate
最少0个参数,最多32个参数
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace Delete 8 { 9 public delegate void GreetHandler(string name); //声明委托 10 class Program 11 { 12 static void Main(string[] args) 13 { 14 //最简单的调用 15 { 16 //GreetHandler greet = new GreetHandler(new Greeting().EnglishGreeting); 17 //greet("Tom"); 18 //greet = new GreetHandler(new Greeting().ChineseGreeting); 19 //greet("张三"); 20 } 21 22 //调用委托 23 { 24 //new Greeting().GreetPeople("Tom", new Greeting().EnglishGreeting); 25 //new Greeting().GreetPeople("张三", new Greeting().ChineseGreeting); 26 } 27 28 //多播委托 29 { 30 GreetHandler greet = new GreetHandler(new Greeting().EnglishGreeting); 31 greet += new GreetHandler(new Greeting().ChineseGreeting); 32 greet("张三"); 33 } 34 } 35 36 } 37 38 39 40 public class Greeting 41 { 42 public void EnglishGreeting(string name) 43 { 44 Console.WriteLine(name + ",Morning"); 45 } 46 47 public void ChineseGreeting(string name) 48 { 49 Console.WriteLine(name + ",早上好"); 50 } 51 52 public void GreetPeople(string name, GreetHandler makeGreeting) 53 { 54 makeGreeting(name); 55 } 56 57 } 58 59 }
Action
用于没有返回值的方法(至少0个参数,最多16个参数)
Func
用于由返回值的方法(至少0个参数,最多16个参数)
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace Delete 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 //<>内可以定义多个参数 14 { 15 Action<int, int> action = new Action<int, int>(new Compute().Add); 16 action(1, 2); 17 } 18 19 { 20 //<>内最后一个为返回值的类型 21 Func<int, int, int> func = new Func<int, int, int>(new Compute().Minus); 22 int result = func(5, 3); 23 Console.WriteLine(result); 24 } 25 } 26 27 } 28 29 public class Compute 30 { 31 public void Add(int a, int b) 32 { 33 Console.WriteLine(a + b); 34 } 35 36 public int Minus(int a, int b) 37 { 38 return a - b; 39 } 40 41 42 } 43 44 45 }
浙公网安备 33010602011771号