delegate IEnumerable<T> GetFromSQLDelegate<T>(...);
public GetFromSQLDelegate myFunctionToCall;
myFunctionToCallで型が指定されていないため、上記はコンパイルされません。私は、通常の一般的な機能として、後でそれを呼び出すことができるように、一般的なデリゲート「ストア」にしようとしている:私は、デリゲートの保存性の具体的なタイプを指定していないよので汎用代理人の保管と使用
// ... somewhere in another code base ...
return MyObject.myFunctionToCall<string>(...);
C#は文句を言います。さまざまな具体的な型代理シナリオを実装せずにジェネリック関数を呼び出すことができるデリゲートを「格納」する(良い)方法はありますか?あなたは、System.Delegate
として値を格納し、それprivate
行い、適切な型に保存されたデリゲートをキャストする機能GetDelegate<T>
を定義することができ
元々代理人に割り当てられていた関数に使用された型にTが一致しない場合、キャストがどのように動作するかわかりません。または、実際にデリゲートに値を割り当てる方法がありませんか? –
代理人を非公開にする(dasblinkenlightによって明示的に呼び出される)ことによって、送信者だけが代理人を「設定」することができ、すべての消費者が代理人を取得できる(ただし設定することはできません)動作する署名の消費者。このパターンは、送信者がデリゲートをデリゲートを呼び出す関数に一致させることができない場合にのみ失敗します。 –
あなたのソリューションは完璧ではありません(ボクシング/アンボクシングが含まれているため)が、デザインに妥協することなく得ることができるほど近くに表示されます。ありがとうございました。 :) –