タイトルのために申し訳ありませんまず、私はもっと良いものを考えることができませんでした...ジェネリック医薬品と違いクラスからオーバーロードされたメソッドを呼び出す - 優先順位の問題
私の問題は、単純なコードサンプルが提示することができます。
public static class Test<T>
{
public static int GetInt(T source)
{
return Convert.ToInt32(source);
}
}
public static class Convert
{
public static int ToInt32(byte source)
{
return 30;
}
public static int ToInt32(object source)
{
return 10;
}
}
なぜConsole.WriteLine(Test<byte>.GetInt(20));
プリント10
、代わりの30
していますか?
.NETのジェネリックは、実行時にJITによって解決されるといつも思っていました。なぜ、ジッタが十分にスマートではないのですか?のパラメータタイプに合ったToInt32(byte)
メソッドが存在することを確認するには、
この動作により、Convert
静的クラスのメソッドは、単純な型のボクシング/アンボクシング操作の結果を呼び出します。
'テスト .GetInt(byte.Parse(「20」))'私は見知らぬ人を見つけるいるだけでなく10を返し、ウォッチウィンドウは、タイプは何にとして、いくつかの手がかりを与えるかもしれないオブジェクト{バイト}であると言いますは進行中です –
Sayse