C# Dynamic关键字之:解析dynamic就是Object
发布时间:2022-09-16 15:08:16
C# 4.0提供了一个dynamic 关键字,那么什么是dynamic,究竟dynamic是如何工作的呢?
从最简单的示例开始:
static void Main(string[] args)
{
dynamic dyn = 1;
object obj = 1;
//在编译时将鼠标放到 ”dyn” 和”obj”中可以发现:
// dyn:局部变量 dynamic (dyn)
// obj: 局部变量object (obj)
System.Console.WriteLine(dyn.GetType());
System.Console.WriteLine(obj.GetType());
}
运行这段代码将显示 dyn 和obj 的运行时类型:
System.Int32
System.Int32
在WriteLine方法后面增加两行:
dyn = dyn + 3;
obj = obj + 3;
编译:
可以看到对于表达式 obj +3 ,编译器器报告了错误,但是不会报 dyn+3 编译。
编译器不会检查包含dyn的表达式,原因在于 dyn 是 dynamic。
类型转换
修改Main代码如下:
dynamic dyn = (dynamic)1;
int j = (int)dyn;
可以看到1被强制转换成dynamic,然后又被强制转换回int.
然而dynamic可以隐式的转换成任何类型,并且也可以从其他类型中转换回来,
所以上面的代码和下面的等价:
dynamic dyn = 1;
int j = dyn;
修改Main代码增加如下代码:
//下面这句话会无法通过编译,typeof 运算符无法用在动态类型上
//Console.WriteLine(typeof(dynamic));
Console.WriteLine(typeof(List<dynamic>));
如果你是typeof(dynamic)会报typeof运算符无法用在动态类型上的错误,
但是如果你写的是List<dynamic> 那么输出结果如下:
可以看到输出时System.Object。
微软对此的解释是:
在大多数情况下, dynamic 类型与 object 类型的行为是一样的。 但是,不会用编译器对包含 dynamic 类型表达式的操作进行解析或类型检查。 编译器将有关该操作信息打包在一起,并且该信息以后用于计算运行时操作。在此过程中,类型 dynamic 的变量会编译到类型 object 的变量中。 因此,类型 dynamic 只在编译时存在,在运行时则不存在。
猜你喜欢
- 本文实例讲述了DevExpress设置饼状图的Lable位置的方法。分享给大家供大家参考。具体实现方法如下:关键代码如下:/// <s
- @PropertySource作用是:对自定义的properties文件加载使用:@PropertySource(value={"
- 三层架构将整个业务应用划分为:(1)界面UI层(2)业务逻辑层(3)数据访问层对于复杂的系统分层可以让结构更加清晰,模块更加独立,便于维护。
- 假定创建了XmlWriter的实例变量xmlWriter,下文中将使用此实例变量写Xml1.如何使用XmlWriter写Xml文档声明//
- 最近看到在Linux上折腾jmeter的人越来越多,不过即使在windows上,jmeter的脚本我还是建议用命令行来执行(降低GUI模式带
- 一. String类简介1. 介绍字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来
- XmlTextWriter类允许你将XML写到一个文件中去。这个类包含了很多方法和属性,使用这些属性和方法可以使你更容易地处理XML。为了使
- java Iterator接口和LIstIterator接口分析目录1.Iterator接口2.ListIterator3.It
- 同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C++/python/Java,结合
- 0.写在前面2020-5-18更新这个东西已经是两年前的了,现在问我具体细节我也不是很清楚了,而且现在review两年前的代码感觉写的好烂。
- 废话不多说,先看效果,如果大家感觉不错,请参考实现代码这个功能我是用Fragmentdialog里面做的,也遇到不少坑第一,就是设置背景的d
- 知识准备需要了解POI工具,以及POI对Excel中的对象的封装对应关系。什么是POIApache POI 是用Java编写的免费开源的跨平
- 一、 通过JDK网络类Java.net.HttpURLConnection1.java.net包下的原生java api提供的http请求使
- 程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....程序设计:public class exp2{ publi
- 我们知道,在java中,将一个非原型类型类型的对象引用,赋值给另一个对象的引用之后,这两个引用就指向了同一个对象,如:public clas
- 目录前言令牌中继令牌难道不能在Feign自动中继吗?实现令牌中继InheritableThreadLocal实现令牌中继总结前言在Sprin
- GlobalLock的作用对于某条数据进行更新操作,如果全局事务正在进行,当某个本地事务需要更新该数据时,需要使用@GlobalLock确保
- 在使用之前先介绍一个并发需要用到的方法:CountDownLatchCountDownLatch(也叫闭锁)是一个同步协助类,允许一个或多个
- 1. 前言Guava是一个由Google开发的Java核心库,它提供了很多有用的方法和实用工具类,可以帮助开发人员提高代码质量和开发效率。在
- 本文实例为大家分享了Android实现3D层叠式卡片图片展示的具体代码,供大家参考,具体内容如下先看效果好了效果看了,感兴趣的往下看哦!整体