C# delegate event func action 匿名方法 lambda表達式


delegate event action func 匿名方法 lambda表達式

  delegate類似c++的函數指針,但是是類型安全的,可以指向多個函數,

  public delegate void DelegateMethod(); //聲明了一個Delegate Type
  public DelegateMethod delegateMethod; //聲明了一個Delegate對象
  var test = new TestDelegate();

  test.delegateMethod = new TestDelegate.DelegateMethod(test.NonStaticMethod);
 test.delegateMethod += new TestDelegate.DelegateMethod(TestDelegate.StaticMethod);

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

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM