Tout en parlant avec un collègue à propos de C#, il m'a montré un code C# que j'ai eu à prédire la sortie de. Ce semblait simple, en premier lieu, mais il n'était pas. Je ne peux pas vraiment comprendre pourquoi C# réagit de cette façon.
Le code:
public class A<T1>
{
public T1 a;
public class B<T2> : A<T2>
{
public T1 b;
public class C<T3> : B<T3>
{
public T1 c;
}
}
}
class Program
{
static void Main(string[] args)
{
A<int>.B<char>.C<bool> o = new A<int>.B<char>.C<bool>();
Console.WriteLine(o.a.GetType());
Console.WriteLine(o.b.GetType());
Console.WriteLine(o.c.GetType());
Console.ReadKey();
}
}
La sortie est:
System.Boolean
System.Char
System.Int32
Corrigez-moi si je me trompe, mais je comprends qu' o.a
est de type bool, car C<T3>
hérite B<T3>
et B<T2>
hérite A<T2>
. Et je peux aussi légèrement comprendre qu' o.c
est de type int, car le type d' c
est T1
qu'il obtient à partir de l'extérieur de la classe (je pense).
Ma tête est sur le point d'exploser quand j'essaie de comprendre pourquoi o.b
est de type char. Peut-on expliquer cela à moi?