4.0 DLRで遊んでいて、動的とオブジェクトを比較していて、これに出くわしました。
コード:
object x = 10;
Console.WriteLine("x = {0} and is a {1}.\n", x, x.GetType());
x = (int)x + 3;
Console.WriteLine("x = {0} and is a {1}.\n", x, x.GetType());
x = x + "a";
Console.WriteLine("x = {0} and is a {1}.\n", x, x.GetType());
結果:
x = 10であり、System.Int32です。
x = 13であり、System.Int32です。
x = 13aであり、System.Stringです。
私には、オブジェクトが実行時にオブジェクトを型に適合させようとしているように見えます(動的)。ただし、3行目のintにxをキャストしないと、静的型付けに適していると思われるコンパイラー領域が得られます。しかし、xに「a」を追加すると、文字列として認識されるようになります。
私は何が欠けていますか?