私は代表者の進化を理解しようとしていました。そして、これは、その前に何が起こったのかを理解することよりも、どのように最もよく理解できるでしょうか?デリゲートの概念は、C++の関数ポインターから来ていることを理解しています。
1.関数ポインタを導入する主な理由は何ですか?マルチスレッドをサポートするためですか?
Henk Holterman:あるレベルの柔軟性を提供するために、デリゲート/関数ポインターが存在します。メソッドの選択は、その呼び出しから切り離すことができます。
この素晴らしいスレッドリソースを見ながら、私は代表者に紹介されました
http://www.albahari.com/threading/
これは、JoeAlbahariが非同期デリゲートについて言わなければならないことです。
ThreadPool.QueueUserWorkItem
実行終了後にスレッドから戻り値を取得するための簡単なメカニズムは提供されていません。非同期デリゲート呼び出し(略して非同期デリゲート)はこれを解決し、任意の数の型指定された引数を双方向に渡すことができます。さらに、非同期デリゲートでの未処理の例外は、元のスレッド(より正確には、を呼び出すスレッドEndInvoke
)で便利に再スローされるため、明示的な処理は必要ありません。
*2。すべてのデリゲートは本質的に非同期ですか?
Jon:デリゲートはコードへのポインターです。本質的に同期でも非同期でもありません。それが呼び出され、返される結果がそれを決定する方法。
Henk Holterman:デリゲートインスタンスfがある場合、同期的にf()を呼び出すか、非同期のf.BeginInvoke()を呼び出すことができます。
- イベント以外の非同期デリゲートの使用法はありますか?
dasblinkenlight : .NET非同期I / Oなど、非同期APIではデリゲートの多くの用途があります。
- C#でのデリゲート/スレッドのサポートはバージョン間でどのように進化しましたか?
*
dasblinkenlight:デリゲートのコアサポートは同じままでしたが、言語はデリゲートの定義をより便利にするために多くの重要な機能を追加しました。
C#2.0:匿名デリゲートの導入
C#3.5:ラムダ式を追加
C#4.0:タスク並列ライブラリを追加。
編集:ここでの私の質問のほとんどは明確にされています。代表者の「歴史」ともっと実用的な使い方ができたらいいなと思います!