私が基本的にやりたいことは、GetHandler<T>
を返すというメソッドを持つことAction<T>
です。C# 構文ではこれが可能ですが、正直なところ、そのようなメソッドをどのように実装する必要があるのか わかりません。
T の型に基づいて別の関数を返したいので、現在の試行は次のようになります。
public override Action<T> GetHandler<T>()
{
if (typeof(T) == typeof(MyType))
{
return delegate (T t)
{
var msg = (MyType)t;
//do stuff
}
}
return null;
}
に変換できないため、これは機能しませT
んMyType
。delegate (MyType msg)
もちろんサインも違うので返品もできません。
この状況で理想的なのは、C# でジェネリック メソッドの複数のオーバーライドを許可し、個別の入力に対して個別のハンドラーを指定してから、他のすべてを処理するキャッチオール オーバーライドを許可することです。ただし、キャッチオールワンをどのように実装するかはまだわかりません。
では、この機能にできるだけ近づけるために何をすることをお勧めしますか? 私の見方では、T は有用なものにキャストできないため、私の関数はほとんど何もできません。
このメカニズムの使用例を次に示します。
上記の動作を実装するインスタンスのコレクションを持つクラスがあります。このクラスにはメソッドがありSendMessage<T>
ます。このメソッドは、含まれているすべてのインスタンスをGetHandler<T>()
調べてそれらを呼び出し、結果が null かどうかをチェックし、そうでない場合はハンドラーにメッセージを送信します。