一直在玩 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 行将 x 转换为 int,它会给我一个编译器区域,这对于静态类型来说似乎是正确的。但随后它允许我向 x 添加一个“a”,现在它将它识别为一个字符串。
我错过了什么?