Podczas rozmowy z kolegą o C#, pokazał mi kod C#, który musiałem przewidzieć wyjście. To wyglądało na proste, ale tak nie było. Nie mogę naprawdę zrozumieć, dlaczego C# działa w ten sposób.zrozumienie zagnieżdżonych klas generycznych w C# z quizem
Kod:
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();
}
}
Wyjście jest:
System.Boolean
System.Char
System.Int32
Popraw mnie jeśli się mylę, ale rozumiem, że o.a
jest typu bool ponieważ C<T3>
dziedziczy od B<T3>
i B<T2>
dziedziczy od A<T2>
. I mogę też nieco zrozumieć, że o.c
jest typu int, ponieważ typ c
jest T1
, który pobiera z klasy zewnętrznej (myślę).
Moja głowa prawie eksploduje, gdy próbuję ustalić, dlaczego o.b
jest typu char. Czy ktoś może mi to wyjaśnić?
Cieszę się, że nie utrzymuję kodu w twojej firmie. – Default
Interesujące, ale całkowite przesadzenie za cokolwiek praktycznego. Zakładam, że to akademickie, a nie do pracy? – JGilmartin
@Default Dlaczego? Ponieważ lubią quizować się na dziwnym kodzie C#? – Erix