同僚と 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
修正C<T3>
しB<T3>
てB<T2>
くださいA<T2>
。o.c
また、型が int であるc
ことも少し理解できます。これは、型T1
が外部クラスから取得されるためです (と思います)。
o.b
が char 型である理由を理解しようとすると、頭が爆発しそうになります。誰かが私にこれを説明できますか?