C#で、真のシングルキャストデリゲートをどのように作成しますか。つまり、呼び出しリスト内の1つの(そして1つだけの)メソッドを参照できるデリゲートインスタンスであり、イベント(多数のサブスクライバーが存在する可能性がある)ではなく、コールバック(単一のサブスクライバーの場合)として使用されます。
フレームワークには、System.DelegateクラスとSystem.MulticastDelegateクラスがあり、System.Delegateはシングルキャストであり、System.Multicastデリゲートはマルチキャスト機能を追加しているという誤った印象を与えます。しかし、System.Delegate http://msdn.microsoft.com/en-us/library/system.delegate.aspxのMSDNドキュメントには、System.Delegateが実際にはマルチキャストであることが示されています...
「デリゲートの呼び出しリストは、リストの各要素がデリゲートによって表されるメソッドの1つだけを呼び出す順序付けられたデリゲートのセットです。」
...一方、System.MulticastDelegateのドキュメントでは、System.MulticastDelegateが提供する追加の動作については実際には説明されていません。
この分野の公式ドキュメントはかなり紛らわしいですが、明確なことの1つは、エンドユーザーがSystem.DelegateまたはSystem.MulticastDelegateのどちらからも派生できないことです。それで、単一のコールバックへの参照を格納するための変数として使用できる真のシングルキャストデリゲートを作成するためのフレームワークによってサポートされる方法はありますか?
@dtb。シングルキャストデリゲートを使用できる場合は、ランタイムチェックの必要がなくなります。もちろん、間違ったハンドラーが割り当てられるなど、アプリケーションロジックが他の方法で失敗する可能性があることは事実ですが、少なくともシングルキャストデリゲートを使用する場合、1つだけを期待する複数のハンドラーが存在するという問題は、単純に1つの問題です。存在することはできないため、チェックすることが1つ少なくなり、ユニットテストが簡単になり、デザインがよりエレガントになります。また、戻り値を持つメソッドのデリゲートの呼び出しリストに複数のハンドラーがある場合、最初のハンドラーではなく、リストの最後のハンドラーによって返される値が呼び出し元に返されます。