Prima di tutto, mi spiace per il titolo, ma non riuscivo a pensare a nulla di meglio ...Generics e chiama metodo di overload dalla classe differenza - questione di precedenza
Il mio problema può essere presentata da codice di esempio semplice:
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;
}
}
Perché Console.WriteLine(Test<byte>.GetInt(20));
stampe 10
, invece di 30
?
Ho sempre pensato che i generici in .NET siano risolti da JIT durante il runtime. Perché allora il jitter non è abbastanza intelligente, per scoprire che esiste il metodo ToInt32(byte)
, che si adatta al nostro tipo di parametro byte
qui?
Questo comportamento rende i metodi di classe statici Convert
richiamare il risultato nelle operazioni di boxing/unboxing per i tipi semplici.
'Test .GetInt (byte.Parse ("20"))' restituisce 10 così che trovo straniero, La finestra orologio dice che il tipo è oggetto {} byte che potrebbe dare qualche indizio su quello che sta succedendo –
Sayse