代表者(またはそのことについてAction
)のFunc
家族が
//.NET 4 and above
public delegate TResult Func<out TResult>()
public delegate TResult Func<in T, out TResult>(T obj)
//.NET 3.5
public delegate TResult Func<T1, T2, TResult>(T1 obj1, T2 obj2)
public delegate TResult Func<T1, T2, T3, TResult>(T1 obj1, T2 obj2, T3 obj3)
など各国代表のように宣言シンプルなデリゲートの種類に過ぎませんout/refパラメータを持つことができるので、あなたのケースでは、他の答えが指摘しているように、独自のカスタム実装の問題のみです。 Microsoftがデフォルトでこれを詰め込んでいない理由については、必要な組み合わせの数を考えてみてください。
delegate TResult Func<T1, T2, TResult>(T1 obj1, T2 obj2)
delegate TResult Func<T1, T2, TResult>(out T1 obj1, T2 obj2)
delegate TResult Func<T1, T2, TResult>(T1 obj1, out T2 obj2)
delegate TResult Func<T1, T2, TResult>(out T1 obj1, out T2 obj2)
ただ2つのパラメータです。我々はref
に触れていない。実際には開発者にとっては面倒で混乱します。
誰かが私のように混乱している場合は、ビルトインのものと同じように代理人 "Func"に電話する必要はありません。 – Dunc
@Dunc - 修正。私は本当にあなたのコメントにはそれが混乱していただろう。 –
C#4(2010)以降(あなたの答えを書いたときにはリリースされていませんでした)では、反逆として「T」を、共変として「V」をマークすることができます。しかし、 'U'型のパラメータ( 'output')は参照***によって***に渡されるので、' U'は共変または反復的にマークすることはできず、「不変」のままでなければなりません。だから、もしあなたがC#4以降を使っているならば、 'Public Delegate V MyDelegate(T input、out U出力); –