1. 程式人生 > >c# delegate action func predicate event 匿名函數 lambda

c# delegate action func predicate event 匿名函數 lambda

編寫 tel keyword AC 保存 word HA 沒有 上下文

1、delegate
  是C#中的一種類型,它實際上是一個能夠持有對某個方法的引用的類。
  與其它的類不同,delegate類能夠擁有一個簽名 (signature),並且它只能持有與它的簽名相匹配的方法的引用。
  它所實現的功能與C/C++中的函數指針十分相似。它允許你傳遞一個類A的方法m 給另一個類B的對象,使得類B的對象能夠調用這個方法m。但與函數指針相比,delegate有許多函數指針不具備的優點:
  首先,函數指針只能指向靜態函 數,而delegate既可以引用靜態函數,又可以引用非靜態成員函數。在引用非靜態成員函數時,delegate不但保存了對此函數入口指針的引用,而 且還保存了調用此函數的類實例的引用。
  其次,與函數指針相比,delegate是面向對象、類型安全、可靠的受控(managed)對象。也就是 說,runtime能夠保證delegate指向一個有效的方法,你無須擔心delegate會指向無效地址或者越界地址。

2、action
  是沒有返回值的委托,Action 表示無參,無返回值的委托, Action<int,string> 表示有傳入參數int,string無返回值的委托。
3、func
  指有返回值的泛型委托,Func<int> 表示無參,返回值為int的委托,Func<object,string,int> 表示傳入參數為object, string 返回值為int的委托。
4、predicate 
  是返回bool型的泛型委托。
5、event
  用來修飾delegate,不加event的委托就是一個普通的委托,可以直接通過委托調用,加了event的委托是一個事件,只能通過類的成員函數調用。
6、匿名方法
  不需要使用特定的方法,簡化代碼,
  1. host.Opened += delegate(object sender, EventArgs e)
  2. {
  3. Console.WriteLine("Service Opened.");
  4. };

  不帶參數和返回值的匿名方法,可以被具有任何形式簽名的委托所指代,如果有一個重載的方法,參數為兩種類型的委托,調用這個方法時如果使用不帶參數和返回值的匿名方法會編譯錯誤

  1. static void Output(IntDelegate id)
  2. {
  3. }
  4. static void Output(StringDelegate sd)
  5. {
  6. }
  7. static void Main(string[] args)
  8. {
  9. Output(delegate { });
  10. }
7、lambda表達式
  也是一種匿名方法,(參數列表)=>表達式或語句塊,在編寫Lambda表達式時,可以忽略參數的類型,因為編譯器能夠根據上下文直接推斷參數的類型,

c# delegate action func predicate event 匿名函數 lambda