-1

重複の可能性:
ジェネリックタイプとは誰が実際に最後に決定しますか?

私の質問のタイトルにあるように、誰でも境界とは何か(上限、下限、正確な境界)を説明してください。また、例を使用して型推論でどのように役割を果たすのでしょうか。

単純なコードを考えてみましょう:

void func<T> ( T firstparam , T secondparam) { }

発信者はそれを呼び出します

func( 23 , 23.23 ); 

型推論プロセスが発生する間の境界は何ですか?また、推論プロセスでそれらがどのように使用されるのですか?私が提示した例が非常に些細で、上限などがない場合は、アイデアを表す独自の例を含めてください。

4

2 に答える 2

5

あなたの例では、型推論に限界はありません。あなたがそれを次のように呼ぶなら

 func( 23 , 23.23 ); 

その場合、タイプの候補はとにintなりdoubleます。Int暗黙的にキャストできますがdouble、その逆はできません。したがって、の固定タイプはTですdouble。これは境界とは関係ありませんが、タイプの互換性です。

しかし、あなたがそれを次のように呼ぶなら

func( new object() , 23.23 );

その場合、の上限は、Tになりobject、下限はになりますdouble。このような場合、の固定タイプはTになりますobject

Eric Lippertは、メソッドタイプの推論が確実に終了するようにする方法についてのブログ投稿で、境界とは何か、および境界が下限、上限、および正確な境界を分離する理由について説明しています。

Jon Skeetは、彼のすばらしい本C#in Depthで、 9.4.3の2フェーズ型推論のプロセスを詳細に説明しています。リスト9.11の型推論に関する彼の説明を注意深く読んでください。

于 2013-01-16T17:51:51.390 に答える
1

型の境界が何を意味するのかわかりませんが、あなたの例で23int23.23は、doubleであり、anintは自動的にに変換可能doubleです。したがって、コンパイラーは両方のパラメーターを同じタイプ(double)として扱うことができるため、それは。であると推測しTますdouble

于 2013-01-16T17:46:10.357 に答える