【发布时间】:2015-01-03 06:35:13
【问题描述】:
dynamic a = 4;
dynamic 仅在编译时是一种类型。那么 a 在编译时是动态的,但在执行时不是。我说的时候发生了什么
a = "pp";
执行中a的类型发生变化(很奇怪),或者它创建了一个字符串类型的新变量a。
【问题讨论】:
dynamic a = 4;
dynamic 仅在编译时是一种类型。那么 a 在编译时是动态的,但在执行时不是。我说的时候发生了什么
a = "pp";
执行中a的类型发生变化(很奇怪),或者它创建了一个字符串类型的新变量a。
【问题讨论】:
动态 a = 4;
当我说的时候发生了什么
a = "pp";
字符串值"pp"被赋值给变量a。
执行中
a的类型变化(很奇怪)
True(从技术上讲,areferences 的 type 在运行时会发生变化),但这并不奇怪 - 如果您使用“object”,它的工作方式相同:
object a = 4;
Console.WriteLine(a.GetType().Name); // Int32
a = "pp";
Console.WriteLine(a.GetType().Name); // string
变量a可以保存any类型,a实际上references可以在运行时改变。
dynamic 的工作方式与object 非常相似,因为它可以引用任何类型的对象。不同之处在于dynamic 变量上的操作 在编译时不会被检查;它们在运行时被延迟和绑定。所以这是完全合法的:
dynamic a = 4;
a = a + 1;
a = "pp";
Console.WriteLine(a.Substring(1,1));
object 不进行强制转换就无法做到这一点,因为 object 没有定义 + 运算符或 Substring 方法。
【讨论】: