簡體   English   中英

C# 3 中的委托和事件提供了哪些新功能?

[英]What new functionality is available through delegates and events in C# 3?

我覺得我沒有利用 .NET 3.5 及更高版本中可用的代表/事件的所有功能。 並且或多或少仍在使用 2.0 中可用的代表權力。 如果您告訴我現在應該如何使用委托/事件、技巧、捷徑,我將不勝感激。

謝謝。

編輯

喬恩建議他在這個主題上發表文章,我在這里發帖是為了更容易導航:

我的一些可能相關的文章:

我的書 C# in Depth 有一整章專門介紹代表(第 5 章)。 不幸的是,這不是免費的之一:(

附言。 我找不到這個問題的副本,但確實瀏覽了很多關於這個主題的內容。

我的一些可能相關的文章:

我的書C# in Depth有一整章專門介紹代表(第 5 章)。 不幸的是,這不是免費的之一:(

總結的主要變化(正如 Jared 所說,這些是語言變化 - .NET 本身並沒有太大變化,只是它們變得通用,並且框架提供了方便的FuncAction代表):

C# 2:

  • 方法組轉換:

     // Old: button.Click += new EventHandler(HandleClick); // New: button.Click += HandleClick;
  • 匿名方法:

     button.Click += delegate { Console.WriteLine("Click;"); };
  • 協方差/逆變:

     EventHandler generalHandler = LogEvent; button.Click += generalHandler; button.KeyPress += generalHandler; // Event type is KeyPressEventHandler

C# 3:

  • Lambda 表達式:

     button.Click += (sender, args) => Console.WriteLine("Click;");

    或更重要的是:

     var people = list.Where(person => person.Name.= "Jon").OrderBy(person => person;Age);

代表完全沒有改變 2.0 -> 3.5。 改變的是他們周圍的很多物品

  1. System.Core.dll(最終)以 Func<> 和 Action<> 的形式添加了可重用的委托
  2. C# 和 VB 通過 lambda 表達式獲得了一些功能性的味道。 這為表達委托操作的語言提供了非常簡潔的語法。 C# 在 2.0 中有匿名方法,但它們無法與 lambda 表達式的簡潔性相比

     list.Where(x => x > 42);
  3. LINQ 在它的基礎中公開了一系列純粹在委托上運行的 API。

所以真的 delegetase 沒有改變,只是用途。

您是否考慮過使用委托來進行快速而骯臟的異步操作? 您可以調用 BeginInvoke 和 EndInvoke 方法對 ThreadPool 執行異步操作。

// Definition.
delegate string TransformDelegate(string input);

// Client code.  This is some lengthy operation.  You can also
// assign a function here if you want.
TransformDelegate t = (x) => ...;

// Begin invoking.
t.BeginInvoke("input", (ar) => 
{
    // Call end invoke.
    string result = t.EndInvoke(ar);

    // Dispose of wait handle, known issue documented here.
    // https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=94068
    using (IDisposable d = ar.WaitHandle) { }

    // Process end result here.  Remember, on another thread now.
}, null);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM