..>前言
无力吐槽今天的天气,特别冷,喝杯奶茶继续写点东西吧!
委托
委托是一种引用类型,类似于C语言中的指针类型,不过这个“指针”一定是指向某种类型的函数的。
对象也是引用类型,注意引用类型与值类型的区别。例如:
1 class A 2 { 3 public int x; 4 } 5 class Program 6 { 7 static void Main(string[] args) 8 { 9 A a = new A(); 10 a.x = 5; 11 A b = a; 12 b.x = 6; 13 Console.WriteLine(a.x);//6 14 Console.WriteLine(b.x);//6 15 A c = new A(); 16 c = a; 17 c.x = 7; 18 Console.WriteLine(a.x);//7 19 Console.WriteLine(c.x);//7 20 Console.Read(); 21 } 22 }
定义委托用关键字delegate,格式为:
访问修饰符delegate返回值类型 方法名(形参表);
例如:public delegate int myDelegate(int x,int y) ;
注意定义的委托只是一种类型,要创建这种类型的实例才能完成对委托的操作。而在创建委托的实例时,又必须先定义一个这函数,或实例化一个对象,将这个函数或对象的方法封装到新创建的委托类型的变量中去。
委托的操作有:
=,将另一个函数封装到委托中去。
+,将另一个函数添加到委托中去
-,将另一个函数从委托中删除
例如以下程序:
一:
1 public delegate int myDelegate(int x,int y) ; 2 static int f(int a, int b) 3 { return a + b; } 4 static int ff(int x, int y) 5 { return x > y ? x : y; } 6 static void Main(string[] args) 7 { 8 myDelegate a = new myDelegate(f); 9 Console .WriteLine ( a(3, 5));//8 10 myDelegate b = new myDelegate(ff); 11 Console.WriteLine(b(3, 5));//5 12 myDelegate c=a+b;//将a与b互换看看结果如何? 13 Console .WriteLine (c(3,5));//5,这里要补充一下,c(3,5)是有两个个方法的返回值,由于后面方法的返回值值覆盖前面方法的返回值,所以只打印出后面方法的返回值,同学别在这里搞糊涂的呀。 14 c = c - b;//将b改成a看看结果如何? 15 Console.WriteLine(c(3, 5));//8 16 Console.Read(); 17 }
二:
1 public delegate void myDelegate(int x, int y); 2 static void fun(int a, int b) 3 { Console.WriteLine(a + b); } 4 static void fun1(int x, int y) 5 { Console.WriteLine(x > y ? x : y); } 6 static void Main(string[] args) 7 { 8 myDelegate a = new myDelegate(fun); 9 a(3, 5);//8 10 myDelegate b = new myDelegate(fun1); 11 b(3, 5);//5 12 myDelegate c = a + b; //将a与b互换看看结果如何? 13 c(3, 5);//8,5,这里每一个方法都有输出(看上面的方法⬆️),所以有两个结果呃。 14 c = c - b; //将b改成a看看结果如何? 15 c(3, 5);//8 16 Console.Read(); 17 }
看到这里是不是觉得委托其实也没啥的呢,欢迎大家的意见噢