我知道C#的拳击和拆箱概念用于类型转换。但它如何在C#中用于动态变量。当我们使用动态变量时,如何进行类型转换。它以何种方式遵循c#
的装箱和拆箱原则我认为装箱和拆箱不会将动态类型视为对象,因为它们不相同。不知道他们是否遵循相同的装箱和拆箱机制 请参阅此链接dynamic vs object type
当您使用dynamic时,整个表达式在编译时被视为动态表达式,这会导致编译器将所有内容视为动态并获得运行时绑定。
这是因为在下面的行str是动态的
dynamic str = "22/11/2013 10:31:45 +00:01";
var withOffset = DateTimeOffset.Parse(str);
在编译时str是动态的,str的类型只在运行时才知道,这就是编译器将withOffset视为动态的原因
答案 0 :(得分:1)
对象和动态在装箱和拆箱时具有相同的行为(您可以在生成的IL代码中进行检查)。
在这种情况下,这两者之间的主要区别是:
编译器允许您执行:
1.var withOffset = DateTimeOffset.Parse(str);
2.DateTimeOffset withOffset = DateTimeOffset.Parse(str);
3.DateTime withOffset = DateTimeOffset.Parse(str);
但是在运行时,clr确保类型安全,所以如果你编写案例3,它会编译,但在运行时clr会抛出一个RuntimeBinderException。
希望它有所帮助!