2013-07-18 26 views
1

我打電話庫裏面的方法「美孚(對象S,行動對行動)」。 因爲函數本身涉及一定的執行時間,所以我使用CountDownEvents的' 來通知我函數何時完成了它的工作。活動,行動在C#中 - 在一個線程上下文

類似,

countdownEvent.Reset(); 


try 
{ 
    Foo(obj,()=> countdownEvent.Signal()); 
} 
catch(Exception e) 
{ 
    countdownEvent.Signal(); 
} 
countdownEvent.Wait(); 

的一部分,我不理解是

  1. 什麼叫()=> countdownEvent.Signal()?什麼是「()=>」特別代表什麼?
  2. 爲什麼方法簽名不是書面美孚(對象S,CountDownEvent事件),它可以 內部信號?
  3. 我還沒有真正理解Action類。谷歌搜索了一下,但不能找到 一些超級簡單的例子開始。

任何幫助表示讚賞!

+2

我的理解是,行動僅僅是一個代表。 – jfin3204

回答

2
  1. ()=>是λ結構(參見C# Lambda (=>))。通過使用lambda表達式,可以編寫可作爲參數傳遞或作爲函數調用的值返回的本地函數。 Lambda表達式對編寫LINQ查詢表達式特別有用。但是你可以用它來寫代理實現的任何類型。
  2. 您可以按照展示的方式指定相同的代碼,但使用Action可以更靈活。在第一種情況下,它是一個具有聲明行爲的特定函數。其次 - 這是一些活動,您可以根據程序的邏輯進行更改。
  3. Action只是一個代表,這是宣佈一些動態行爲。它封裝了一個方法具有參數不返回值。若要引用具有參數的方法返回值,請改爲使用通用Func委託。當你的課程期望某些行爲時,它經常被使用,並且你希望你的課堂消費者自己聲明這個行爲。

更新:根據VikciaR評論

+1

我會同意你的3.動作沒有單一的實現:有不同數量的參數的多個實現。 Func不僅有參數,而且還有返回值。 – VikciaR

+0

@VikciaR好的,我糾正了我的答案,謝謝)) – Alex

3

() => countdownEvent.Signal()lambda expression

在這種特殊的情況是某種匿名方法沒有參數,並且具有相同的返回類型countdownEvent.Signal()

1
  1. 這就是所謂的Lambda表達式。您可以將其視爲簡單的內聯方法。 ()=>表示該方法沒有參數。 (string x)=>意味着 - 一個參數。
  2. 事件和lambda表達式是類似的概念(Lambda表達式是從委託進化而來的)。閱讀here
  3. MSDN是最好的:-)
相關問題