C# dynamic 类型用法举例

     dynamic类型允许编写忽略编译期间的类型检查的代码。编译器假定,给dynamic类型的对象定义的任操作都是有效的。如果该操作无效,则在代码运行之前不会检测该错误,如下面的示例所示:

f5224408c9427361bf23e40976703909.png

这个示例没有编译,因为它调用了staticPerson.GetFullName方法。因为Person 对象上的方法不接受两个参数,所以编译器会提示出错。如果注释掉该行代码,这个示例就会编译。如果执行它,就会发生一个运行错误。所抛出的异常是RuntimeBinderException 异常。RuntimeBinder对象会在运行时判断该调用,确定Person类是否支持被调用的方法。

      与 var 关键字不同,定义为dynamic的对象可以在运行期间改变其类型。注意在使用var关键字时,对象类型的确定会证迟。类型一旦确定,就不能改变。动态对象的类型可以改变,而且可以改变影次,这不同于把对象的类型事转换为另一种类型。在强制转换对象的类型时,是用另一种兼容的类聚们建一个新对象。如,不能把int强制转换为Penon对象。在下面的示例中,如果对象是动态对象,就可以把它从int变成Persor类型:

static void Main(string[] args){//var staticperson  = new Person();//dynamic dynamicPerson = new Person();//staticperson.GetFullName("John", "Smith");//dynamicPerson.GetFullName("Jchn", "Smith");dynamic dyn;dyn = 100;Console.WriteLine(dyn.GetType());Console.WriteLine(dyn);dyn = "This is a string";Console.WriteLine(dyn.GetType());Console.WriteLine(dyn);dyn = new Person() { FirstName = "Bugs", LastName = "Bunny" };Console.WriteLine(dyn.GetType());Console.WriteLine($"{dyn.FirstName} {dyn.LastName}");Console.ReadKey();}

d696952acf53cdd60a44417ba39c436b.png

执行这段代码可以看出,dyn对象的类型实际上从System.Int32变成System.String.再变成Person。如果 dyn声明为int 或string,这段代码就不会编译。

注意:对于dynamic 类型有两个限制。动态对象不支持扩展方法,匿名函数(lambda表达式)也不能用作动态方法调用的参数,因此LINQ不能用于动态对象,大多数LINQ调用大都是扩展方法,而lambda表达式用作这些扩展方法的参数.

技术群:添加小编微信并备注进群

小编微信:mm1552923   

公众号:dotNet编程大全      

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/292003.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在微信小程序中绘制图表(part2)

本期大纲 1、确定纵坐标的范围并绘制 2、根据真实数据绘制折线 相关阅读:在微信小程序中绘制图表(part1)在微信小程序中绘制图表(part3) 关注我的 github 项目 查看完整代码。 确定纵坐标的范围并绘制 为了避免纵坐标的…

dynamic_cast

dynamic 转换时的类必须有虚函数&#xff0c;否则会编译报错。 #include <iostream> using namespace std;class A { public:int a ;int b;void prt(void){std::cout <<"prt here" << std::endl;}//virtual ~A(){}; };class B: public A { };class…

Windows 8.1 新增控件之 CommandBar

上一篇为大家介绍了AppBar 的相关内容&#xff0c;本篇继续介绍CommandBar 的使用方法。与AppBar 相比而言&#xff0c;CommandBar 在开发使用方面较为单一&#xff0c;在按键布局上分为主控区&#xff08;Primary Commands&#xff09;与辅控区&#xff08;Secondary Commands…

很抱歉,你不涨工资,正是因为你“太努力”!

太多人干了一辈子工作却还在原地踏步太多人在公司里任劳任怨最终还一事无成你或许欠缺的不是努力而是思维聪明的人都会投资自己想办法让自己变得无可替代这样老板离不开你的那一天就是你升职加薪的时候快来和我一起看看哪些公众号都能帮你提高能力呢&#xff1f;募格课堂ID&…

php文件锁解锁是删除对应的文件_软件 | 文件解锁强制删除工具 Wise Force Deleter v1.49...

有过电脑里面想删除一个文件&#xff0c;死活删除不了的痛苦吗&#xff1f;用尽了各种办法&#xff0c;关闭进程&#xff0c;删除关联文件&#xff0c;卸载对应的程序&#xff0c;然而还是无法删除&#xff0c;甚至都进入了安全模式删除&#xff0c;依然文件纹丝不动&#xff0…

.NET 7 预览版来啦,我升级体验了

听说.NET 7 来了&#xff0c;站长怎能不尝鲜呢&#xff0c;在除夕当天将体验情况简单汇报下&#xff0c;然后迎新春喽&#xff1a;本文目录.NET 7 详情&#xff08;Proposed .NET 7 Breaking Changes #7131&#xff09;.NET 7 SDK下载尝鲜体验3.1 安装.NET 7 SDK3.2 Hello Word…

【emWin】例程六:设置颜色

实验指导书及代码包下载&#xff1a; 链接&#xff1a;http://pan.baidu.com/s/1kVr25vT 密码&#xff1a;xbkj 实验现象&#xff1a;

定制安装centos6.4系统 上汽集团线上环境

准备环境&#xff1a;先手动安装一台centos6.4系统①建立目录iso&#xff0c;挂载镜像yum -y install createrepo mkisofsmkdir /isomount /dev/cdrom /media②copy镜像文件到 iso目录cp -a /media/ /iso③ 编辑ks.cfg文件cat /iso/media/ks.cfg##############################…

搜索引擎 ElasticSearch 之 步步为营2 【基础概念】

在正式学习 ElasticSearch 之前&#xff0c;首先看一下 ElasticSearch 中的基本概念。 这些概念将在以后的章节中出现多次&#xff0c;所以花15分钟理解一下是非常值得的。 英文好的同学&#xff0c;请直接移步官网&#xff1a;&#xff08;http://www.elasticsearch.org/guide…

Eclipse之Android项目名有红感叹号的解决办法

问题&#xff1a; Eclipse之Android项目名有红感叹号的解决办法 代码都没有错&#xff0c;然后项目有红感叹号 1、找问题原因 点击项目右键&#xff0c;然后点击Build Path,然后再Configure Buil Path,然后再去看Library,发现有个jar丢失&#xff0c;是Android-19,路径和我本地…

渣男劈腿,两个女生却逼他做出选择,结果......

1 生一个女儿有多重要&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 真实版眼睛瞪得像铜铃&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 地表最强撞衫&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼4 过年时最怕遇见的人&#xff08;素材…

python重构函数_Python代码重构

代码重构是一件非常辛苦却非常有意义的事情&#xff0c;代码重构的原因在于&#xff1a;1、代码过于冗余、沉余2、代码过于耦合3、代码过于复杂4、接口调用超出三层这次重构主要在于架构问题&#xff0c;自己没有画出实现整个项目的功能&#xff0c;逻辑实现与接口定义&#xf…

Windows端口被占用处理方法

为什么80%的码农都做不了架构师&#xff1f;>>> 以下文章主要以80端口号为例&#xff0c;如果想知道其他的端口号也可以使用该方法..........................1、在windows下如何查看80端口占用情况?是被哪个进程占用?如何终止等. 这里主要是用到windows下…

22543!Windows 11 新预览版发布

面向 Dev 频道的 Windows 预览体验成员&#xff0c;微软现已发布 Windows 11 预览版 Build 22543。主要变化和修复1.Windows 11 锁屏界面新增媒体播放控件&#xff0c;该功能将始终使用深色主题。目前这项功能只对部分 Windows 预览体验成员推出&#xff0c;随着时间的推移&…

linux之安装软件出现Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)解决总结

1、问题 安装netmask出现的问题&#xff0c;如下图 2、解决办法 sudo rm -rf /var/lib/dpkg/locksudo rm -rf /var/cache/apt/archives/lock 如下图

关于网站地址解析到65.49.2.178的问题和解决方法

2014/1/21日从下午3点20点开始全球大量互联网域名的DNS解析出现问题&#xff0c;都指向65.49.2.178这个地址,我们下面拥有的服务器其中有一台也出现了这个问题,直接导致短信发送失败&#xff0c;手机信息推送也失败&#xff0c;支付通道出现问题无法完成支付&#xff0c;与第三…

我到底要选择一种什么样的生活方式,度过这一辈子呢:人生自由与职业发展方向(下)...

上篇&#xff0c;主要探讨了农民、工人、老板、官员等几种职业的一些特点。本篇&#xff0c;重点关注我对未来的预期和个人的选择。第1种选择选择一家或多家中小型公司&#xff0c;短期内专注技术&#xff0c;尤其是Java Web领域技术&#xff0c;不断加强对电商、互联网产品等都…

Sublime Text 的快捷方式的用法

2019独角兽企业重金招聘Python工程师标准>>> #1. 假设我们有一个div&#xff0c;内层有10个div&#xff0c;外层div有一个class的样式叫做row&#xff0c;内层div的样式叫做col-md-12。 那么咱们就可以快捷方式编写为&#xff1a; div.row>div.col-md-12*10然后我…

用户体验五要素_UX系列课(三):用户体验影响力金字塔及五大要素

编辑导语&#xff1a;作为一名UX设计师&#xff0c;要从用户的角度出发创造价值&#xff0c;怎么来衡量产品用户体验的标准&#xff1f;本文作者列出了一个“UX影响力金字塔”&#xff0c;分析影响用户体验的五大要素&#xff0c;我们一起来看一下。一、UX影响力金字塔在UX系列…