- 108 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 12:38:22.34 ID:14/sy/Q9.net]
- >>107
親切にお答えくださってありがとうございます。 ぼんやりと見えてきた感じがします。(まだその程度) >型引数はもちろん手動で hoge.extensionmethod<Hoge, int>( と指定することもできる。 これは、面白いです。 extendmethod<TSorce, TResult>の、わざわざ角かっこ内に定義されたジェネリック型指定が活きてきたからです。 つまり、extendmethod<TSorce, TResult>のように、ジェネリック型を定義することではじめてコード内でその型のプレースホルダを使えるようになることがわかりました。 次のように言えるわけでしょうか。 「 hoge が、IEnumerable<Hoge>型のオブジェクトであるとき、そして、x.yであらわされる値がint型であるとき、 次のようにして拡張メソッドを呼び出すことができる。 また、使用する拡張メソッドの定義は、次のとおり) public static IEnumerable<TResult> extensionmethod<TSorce, TResult>(this IEnumerable<TSource> source, Func<TSource, int> f) {} この拡張メソッド呼び出し方: 1、ノーマルな呼び出し方(このとき、2点は暗黙に指定されている。以下2、3の呼び出し方でこれらをそれぞれ明示的にしていく) hoge.extendmethod(x => x.y) 2、メソッド内で使われるジェネリック型を、明示的に、指定する hoge.extendmethod<Hoge, int>(x => x.y) このとき、ラムダ式のxは、TSourceなので、すなわち、Hoge型ということになる。(質問:合っていますでしょうか) 3、拡張メソッドであることも、明示的に、表しながら呼び出す hoge.extendmethod<Hoge, int>(this hoge, x => x.y) 」
|

|