谈谈dynamickeyword
谈谈dynamickeyword
前言
今天和谈了两年的女朋友分手了,一開始我还认为是由于这次的吵架,由于我今天一天没联系她,她就生气了,说了分手,我是说一開始我以为是这样.然后我想了想,矛盾就像不停的在往一个瓶子里到硫酸,有可能由于这一滴的缘故导致瓶子里的硫酸溢出来了,有了矛盾就要攻克了,珍惜眼前人.
正文
废话说了一大堆,说点正经的,C#4.0提供了一个keyworddynamic,我在曾经的时候说过这个keyword.今天来看看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;
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 = 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代码添加例如以下代码:
//以下这句话会无法通过编译,<span style="font-size:14px;color:#ff0000;"><strong>typeof运算符无法用在动态类型上</strong></span>
//Console.WriteLine(typeof(dynamic));
//以下这句话是对的
Console.WriteLine(typeof(List<dynamic>));
分析原因:假设你是typeof(dynamic)会报出typeof运算符无法拥在动态类型上的错误,可是假设你写的是List<dynamic>那么输出结果就是这种:
System.Collections.Generic.List`1[System.Object]
能够看到输出是:System.Object
微软对此有个解释:
大多数情况下,dynamic类型与object类型的行为是一致的.可是,不会用编译器对包括dynamic类型表达式的操作进行解析或类型检查.编译器将有关该操作信息打包在一起,而且该信息以后用于计算执行时操作.在此过程中,类型dynamic的变量会编译到类型object的变量中.因此,类型dynamic仅仅在编译时存在,在执行时不存在.
谈谈dynamickeyword的更多相关文章
- 【原】谈谈对Objective-C中代理模式的误解
[原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...
- 谈谈一些有趣的CSS题目(十二)-- 你该知道的字体 font-family
开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...
- 谈谈一些有趣的CSS题目(十一)-- reset.css 知多少?
开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...
- 谈谈一些有趣的CSS题目(三)-- 层叠顺序与堆栈上下文知多少
开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...
- 谈谈如何使用Netty开发实现高性能的RPC服务器
RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络,从远程计算机程序上请求服务,而不必了解底层网络技术的协议.说的再直白一点,就是客户端在不必知道 ...
- 谈谈一些有趣的CSS题目(二)-- 从条纹边框的实现谈盒子模型
开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...
- 谈谈一些有趣的CSS题目(四)-- 从倒影说起,谈谈 CSS 继承 inherit
开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...
- 谈谈一些有趣的CSS题目(五)-- 单行居中,两行居左,超过两行省略
开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...
- 谈谈一些有趣的CSS题目(六)-- 全兼容的多列均匀布局问题
开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...
随机推荐
- shell script练习:利用日期进行文件的创建
随日期变化:利用 date 进行文件的创建 想像一个状况,假设我的服务器内有数据库,数据库每天的数据都不太一样,因此当我备份时, 希望将每天的数据都备份成不同的档名,这样才能够让旧的数据也能够保存下来 ...
- [转] 64位Oracle 11g R2的客户端连接时报ORA-01019错误
本文转自:http://blog.csdn.net/downmoon/article/details/8038583 在Win8企业版64位环境下,连接Oracle11g 服务端,搞了整整两天,特将过 ...
- python gdal 修改shp文件的属性值
driver = ogr.GetDriverByName('ESRI Shapefile')datasource = driver.Open(shpFileName, 1)layer = dataso ...
- Server Tomcat v8.0 Server at localhost failed to start 问题解决方法?
bi编程jsp servlet 第一个程序: HelloServlet 运行错误 404: 十月 28, 2017 11:25:14 上午 org.apache.tomcat.util.digest ...
- js 学习笔记---基本概念
早已接触javascript多年之后,竟然还有这些概念混淆不清,毫不知情,说出来真实无地自容 ! 1.使用严格模式,"use strict",虽然不适用,但是要知道,以免别人使用时 ...
- logstash windows下添加服务启动管理
nssm下载链接:http://nssm.cc/release/nssm-2.24.zip
- mybatis 简单的入门实例
第一步:添加mybaties的架包 第二步:配置mybaties的文件 <?xml version="1.0" encoding="UTF-8" ?> ...
- Lua之尾调函数的用法
Lua之尾调函数的用法 --当函数的最后返回结果调用另一个函数,称之为尾调函数 function f(x) return g(x) end --由于“尾调用”不会耗费栈空间,所以一个程序可以拥有无数嵌 ...
- 浏览器 <html>相关
若页面需默认用极速核,增加标签:<meta name="renderer" content="webkit"> https://blog.csdn ...
- hdu 4870
Rating Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...