■83052 |
Re[1]: Funcデリゲートについての質問 |
□投稿者/ 魔界の仮面弁士 -(2017/03/01(Wed) 17:59:18)
| 2017/03/01(Wed) 18:04:50 編集(投稿者)
■No83049 (rotto さん) に返信 > これは、これでいいのですが Ienumerableインターフェースに追加されている × Ienumerable ○ IEnumerable
> Funcデリゲートの型パラメーターは2つまで受け取り可能だと思っていたのですが > ここでは3つ型パラメーターを指定しています。
shu さんが指摘されているように、Func は最後の型パラメーターが戻り値で、 それより前は引数の型です。
また、引数部の型パラメーターの数は、.NET 3.5.x では0〜4個、 .NET 4 以降では0〜16個の実装があります。 この点は Hongliang さんが指摘されていますね。
補足としてもう一つ。共変性/反変性についても触れさせてください。
// 引数 0 個、戻り値 string 型なデリゲート Func<string> func1 = delegate { return "TEST"; };
// それを戻り値 object なデリゲートに代入 Func<object> func2 = func1;
上記は .NET Framework 3.5.x ではエラーになりますが、 .NET Framework 4 以降では問題ありません。
CLR2 では『delegate TResult Func<T1, T2, TResult>』表記でした。 https://msdn.microsoft.com/ja-jp/library/bb534647%28vs.90%29.aspx
CLR4 からは『delegate TResult Func<in T1, in T2, out TResult>』表記です。 https://msdn.microsoft.com/ja-jp/library/bb534647%28vs.100%29.aspx
型パラメータの in 指定は、『反変』であることを意味します。 型パラメータの out 指定は、『共変』であることを意味します。
in は「引数」あるいは setter 専用であることを示し、 out は「戻り値の型」あるいは getter 専用であることを示しますが、 これについては下記が参考になると思います。 http://ufcpp.net/study/csharp/sp4_variance.html |
|