C#に関する同僚と話をしながら、彼は私にその出力を予測しなければならない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型であることを私が間違っているんだけど、私は理解している場合、私を修正しているためB<T3>
とB<T2>
継承からC<T3>
継承A<T2>
から。また、のタイプがint型であることを少しでも理解できます。タイプがc
の場合は、外部クラスから取得するT1
です(私は思っています)。
o.b
がchar型の理由を理解しようとすると、頭が爆発しています。これを私に説明できる人はいますか?
私はあなたの会社でコードを維持していないとうれしいです。 – Default
面白いですが、実用的な何かのためのトータルオーバーキル。私はこれが仕事のためではなくアカデミックであると仮定していますか? – JGilmartin
@Defaultなぜですか?彼らは奇妙なC#コードでお互いをクイズしたいのですから? – Erix