动态类型的含义是什么

本文关键字:是什么 类型 动态 | 更新日期: 2023-09-27 18:29:29

dynamic a = 4;

动态是仅在编译时出现的类型。那么 a 在编译时是动态的,但在执行时间里不是。当我说时发生了什么

a = "pp";

执行更改的类型(非常奇怪(,或者它创建一个具有字符串类型的新变量 a。

动态类型的含义是什么

动态 a = 4;

当我说时发生了什么

a = "pp";

字符串

"pp"分配给变量 a

执行中a变化的类型(非常奇怪(

没错(从技术上讲,a引用的类型在运行时会发生变化(,但这并不奇怪 - 如果您使用"对象",它的工作方式相同:

object a = 4;
Console.WriteLine(a.GetType().Name);  // Int32
a = "pp";
Console.WriteLine(a.GetType().Name);  // string

变量a可以保存任何类型,实际引用的内容a运行时可以更改。

dynamic的工作方式与object非常相似,因为它可以引用任何类型的对象。 不同之处在于,在编译时不检查对dynamic变量的操作;它们在运行时延迟和绑定。 所以这是完全合法的:

dynamic a = 4;
a = a + 1;
a = "pp";
Console.WriteLine(a.Substring(1,1));

如果不强制转换,则无法使用object执行此操作,因为object没有定义+运算符或Substring方法。