我们可以把 方法比作具体任务,委托就是一个任务的标准,只要符合这个标准的任务,都能给这个标准去处理 。
给个例子:
在比如说 委托等于吃饭 ,具体方法是吃鱼 、喝汤 等等
1. 我们可以把 吃饭 =吃鱼
那么我们调用 吃饭 就会吃鱼
2. 我们可以把
吃饭=吃鱼
吃饭+=喝汤
那吃饭就等于 吃鱼+喝汤
委托与方法非常相近
//声名的委托 public delegate void GreetingDelegate(int x, int y); //声名的方法 public Void GreetingDelegate(int x,int y) { //可以有实现 }
有参数类型
有返回类型
有名称和修饰符
区别public后面加了一个delegate
1. 没有具体实现
2.委托可以和类是一个级别 ,但是方法只能声名在类内部
定义一个委托类WriteMethod,那么WriteMethod就是一个委托对象,也可以是理解了一个类型
public delegate void WriteMethod(string x);
可以在类的内部,也可以在类的外部,与类级别是一样的
用委托我们需声名一个委托类型的变量,通过这个变量我们才能使用委托
//声名的委托 public delegate void WriteMethod(string x); //我们可以在方法里面定一个委托类型的变量 WriteMethod 变量; //通过变量使用委托 变量=MethodA;//那么变量就等于了MethodA方法
总共3种给变量赋值方法:
WriteMethod 变量=null; 变量 = 一个和委托格式一样参数的方法 变量 =new MyDel (一个和委托格式一样参数的方法); //比如小张接了一个任务A,那么小张还可以在接一个任务B,那么小张一次就可以执行2个任务 变量 += 继续追加方法
实用案例
//B类中定义一个1个参数的委托 //定义一个Program和定义一个B类 //Program 定义一个输出方法,执行B类的一个方法把Program 方法一起执行 public class Program { public static void Main() { while (true) { B m = new B(); m.delegate1 = MethodA;//也可以new m.delegate1 += MethodB; string str = Console.ReadLine(); m.Run(str); //Console.ReadLine(); } } public static void MethodA(string x) { Console.WriteLine("执行方法A成功"+x); } public static void MethodB(string x) { Console.WriteLine("执行方法B成功"+x); } } public class B { public delegate void WriteMethod(string x); public WriteMethod delegate1; public void Run(string x) { Console.WriteLine("开始执行委托:"); delegate1(x); } }
我们调用了 Run方法 会输:
执行方法A
执行方法B
2016 © donet5.comApache Licence 2.0