在与一位同事谈论 C# 时,他向我展示了一些 C# 代码,我必须预测其输出。这首先看起来很简单,但事实并非如此。我真的不明白为什么 C# 会这样。
编码:
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 类型时,我的脑袋几乎要爆炸了。谁可以给我解释一下这个?