..>前言
無力吐槽今天的天氣,特別冷,喝杯奶茶繼續寫點東西吧!
委托
委托是一種引用類型,類似於C語言中的指針類型,不過這個“指針”一定是指向某種類型的函數的。
對象也是引用類型,注意引用類型與值類型的區別。例如:
class A { public int x; } class Program { static void Main(string[] args) { A a = new A(); a.x = 5; A b = a; b.x = 6; Console.WriteLine(a.x);//6 Console.WriteLine(b.x);//6 A c = new A(); c = a; c.x = 7; Console.WriteLine(a.x);//7 Console.WriteLine(c.x);//7 Console.Read(); } }
定義委托用關鍵字delegate,格式為:
訪問修飾符delegate返回值類型 方法名(形參表);
例如:public delegate int myDelegate(int x,int y) ;
注意定義的委托只是一種類型,要創建這種類型的實例才能完成對委托的操作。而在創建委托的實例時,又必須先定義一個這函數,或實例化一個對象,將這個函數或對象的方法封裝到新創建的委托類型的變量中去。
委托的操作有:
=,將另一個函數封裝到委托中去。
+,將另一個函數添加到委托中去
-,將另一個函數從委托中刪除
例如以下程序:
一:
public delegate int myDelegate(int x,int y) ; static int f(int a, int b) { return a + b; } static int ff(int x, int y) { return x > y ? x : y; } static void Main(string[] args) { myDelegate a = new myDelegate(f); Console .WriteLine ( a(3, 5));//8 myDelegate b = new myDelegate(ff); Console.WriteLine(b(3, 5));//5 myDelegate c=a+b;//將a與b互換看看結果如何? Console .WriteLine (c(3,5));//5,這裡要補充一下,c(3,5)是有兩個個方法的返回值,由於後面方法的返回值值覆蓋前面方法的返回值,所以只打印出後面方法的返回值,同學別在這裡搞糊塗的呀。 c = c - b;//將b改成a看看結果如何? Console.WriteLine(c(3, 5));//8 Console.Read(); }
二:
public delegate void myDelegate(int x, int y); static void fun(int a, int b) { Console.WriteLine(a + b); } static void fun1(int x, int y) { Console.WriteLine(x > y ? x : y); } static void Main(string[] args) { myDelegate a = new myDelegate(fun); a(3, 5);//8 myDelegate b = new myDelegate(fun1); b(3, 5);//5 myDelegate c = a + b; //將a與b互換看看結果如何? c(3, 5);//8,5,這裡每一個方法都有輸出(看上面的方法??),所以有兩個結果呃。 c = c - b; //將b改成a看看結果如何? c(3, 5);//8 Console.Read(); }
看到這裡是不是覺得委托其實也沒啥的呢,歡迎大家的意見噢