-1-委託的作用:使用委託將方法本身作為引數進行傳遞。
-2-委託的定義:委託是一特殊的引用型別,它將方法也作為特殊的物件封裝起來,從而使得方法作為變數或者引數進行傳遞。
-3-使用方法:
delegate 返回值型別 names_weituo(參數列)//這裡的返回值型別是其引用的函式的返回值型別,參數列是引用函式的參數列
例如:現有函式void add (double a,double b)
那麼定義乙個這樣的委託:delegate void weituoadd(double a,double b);
下面是命名方法:
封裝命名方法:names_weituo fuc=new names_weituo(add) //add只是乙個函式名
names_weituo fuc = add;
-4-委託的加減運算
委託物件的相加(合併)就是可以在執行乙個合併後的物件時依次呼叫相應的函式。
下面是一些運算的性質:names_weituo fuc1=null,fuc2=add;
<1>當fuc2自減時:fuc2-=fuc2;那麼fuc2=null,這時候通過其進行方法呼叫會引發程式異常。
<2>當fuc1=add+mul+sub;那麼現在fuc1-=mul,這時候將mul這個方法從已經合併的委託物件中刪除。
-5-傳遞委託物件:c#允許將委託物件作為其它方法的引數或者返回值進行傳遞。
例如下面的程式:
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
namespace 傳遞委託物件
; double a, b;
console.writeline("請輸入要計算的兩個數字:");
a = double.parse(console.readline());
b = double.parse(console.readline());
while(true)
}static calculate getcalculate(int i)
static void add(double a, double b)
+=", a, b, a + b);
}static void sub(double a, double b)
-=", a, b, a - b);
}static void mul(double a, double b)
*=", a, b, a * b);
}static void div(double a, double b)
/=", a, b, a / b);}}
}
下面的程式也是對上面過程的加強一些理解:
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
namespace 通過委託來封裝方法
; double a, b;
console.writeline("請輸入需要計算的數字:");
a = double.parse(console.readline());
b = double.parse(console.readline());
calculate mulit = fuc[0] + fuc[1]+fuc[2]+fuc[3];//委託物件的相加,按此順序依次執行相應函式
mulit(a, b);
while (true)
}static void add(double a, double b)
+=", a, b, a + b);
}static void sub(double a, double b)
-=", a, b, a - b);
}static void mul(double a, double b)
*=", a, b, a * b);
}static void div(double a, double b)
/=", a, b, a / b);}}
}
遺留:如何返回委託物件列表。
擴充套件方法 委託和Lambda
舉例演化lambda string names 問題 從陣列names中篩選字元長度為5的成員 先宣告乙個返回型別為bool的靜態函式 public static bool islengthfive string s return s.length 5 enumerable中的where方法是擴充套...
擴充套件方法 委託和Lambda
舉例演化lambda string names 問題 從陣列names中篩選字元長度為5的成員 先宣告乙個返回型別為bool的靜態函式 public static bool islengthfive string s return s.length 5 enumerable中的where方法是擴充套...
C 委託方法
什麼是委託 可以認為委託是持有乙個或多個方法的物件。下面我們講提供建立和使用委託的語法和語義。在後面你將看到如何使用委託將可執行的 從乙個方法傳遞到另乙個,以及為什麼這樣做是非常有用的。我們將從下面的示例 開始。如果此時你有些東西弄不明白,不必擔心,我會在本章剩餘內容中介紹委託的細節。開始部分宣告了...