Während ich mit einem Kollegen über C# sprach, zeigte er mir einen C# -Code, mit dem ich die Ausgabe von C# vorhersagen konnte. Das sah zunächst einfach aus, war es aber nicht. Ich kann nicht wirklich verstehen, warum C# so handelt.Verständnis für verschachtelte generische Klassen in C# mit Quiz
Der 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();
}
}
Die Ausgabe lautet:
System.Boolean
System.Char
System.Int32
mich korrigieren, wenn ich falsch bin, aber ich verstehe, dass o.a
vom Typ Bool ist, weil C<T3>
erbt von B<T3>
und B<T2>
inherits von A<T2>
. Und ich kann auch leicht verstehen, dass o.c
vom Typ int ist, weil der Typ c
T1
ist, die es von der äußeren Klasse (denke ich) bekommt.
Mein Kopf explodiert fast, wenn ich versuche herauszufinden, warum o.b
vom Typ char ist. Kann mir das jemand erklären?
Ich bin froh, dass ich den Code in Ihrem Unternehmen nicht behalte. – Default
Interessant, aber totaler Overkill für alles Praktische. Ich nehme an, das ist akademisch und nicht für die Arbeit? – JGilmartin
@Default Warum? Weil sie sich gerne auf seltsamen C# -Code quizieren? – Erix