Во время разговора с коллегой о С# он показал мне код С#, который я должен был предсказать вывод. В первую очередь это выглядело просто, но это было не так. Я не могу понять, почему С# действует таким образом.
Код:
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();
}
}
Вывод:
System.Boolean
System.Char
System.Int32
Исправьте меня, если я ошибаюсь, но я понимаю, что o.a
имеет тип bool, потому что C<T3>
наследует от B<T3>
и B<T2>
наследует от A<T2>
. И я также могу понять, что o.c
имеет тип int, потому что тип c
есть T1
, который он получает из внешнего класса (я думаю).
Моя голова почти взрывается, когда я пытаюсь понять, почему o.b
имеет тип char. Может кто-нибудь объяснить это мне?