ホームページ >バックエンド開発 >C++ >C# で任意のタイプのイベントとパラメーター リストを処理するための汎用 `FromEvent` メソッドを作成するにはどうすればよいですか?

C# で任意のタイプのイベントとパラメーター リストを処理するための汎用 `FromEvent` メソッドを作成するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-28 05:00:10122ブラウズ

How Can We Create a Generic `FromEvent` Method for Handling Events of Any Type and Parameter List in C#?

デリゲート型を指定しない汎用 FromEvent メソッド

問題ステートメント:

現在、イベントに基づいてタスクを作成するには、各クラスのイベントごとにカスタム FromEvent メソッドを定義する必要があります。これは面倒で反復的な作業になる可能性があります。目標は、任意のオブジェクトの任意のイベントを処理できる汎用 FromEvent メソッドを開発することです。

課題:

遭遇する主な課題は次のとおりです:

  • コード内でイベントを文字列 (例: "OnCompletion") として渡すと、イベントのみが原因でエラーが発生します= または -= 演算子の左側でアクセスできます。
  • イベントのデリゲートは実行時に不明であり、変更する必要があります。
  • IL を発行して結果を設定します。タスク完了ソース

解決策:

包括的な解決策には次のものが含まれます:

  1. 動的メソッドの作成:検出されたデリゲート型ごとの DynamicMethod。このメソッドは、TaskCompletionSourceHolder クラスの SetResult メソッドを動的に呼び出し、タスクの結果を設定します。
  2. Reflection: リフレクションを使用して、イベントの EventHandlerType プロパティを取得し、デリゲートを作成します発行された DynamicMethod から。
  3. ジェネリックの置換タイプ: 次のコードに示すように、デリゲートの種類 (TaskFromEvent など) を手動で指定する代わりに、TaskFromEvent 拡張メソッドを利用します。
object[] result = await obj.FromEvent("Event Name");

このメソッドはサポートしています。任意の戻り値の型とパラメーター リストを持つイベント。これにより定型コードの必要性がなくなり、さまざまなオブジェクトからのイベントをシームレスかつ再利用可能に処理できるようになります。

以上がC# で任意のタイプのイベントとパラメーター リストを処理するための汎用 `FromEvent` メソッドを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。