我和同事谈论 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时,我的头差点炸了。有人能解释一下吗?