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 项目 查看完整代码。 确定纵坐标的范围并绘制 为了避免纵坐标的…

Windows 8.1 新增控件之 CommandBar

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

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

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

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

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

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

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

【emWin】例程六:设置颜色

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

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

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

Windows端口被占用处理方法

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

22543!Windows 11 新预览版发布

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

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

1、问题 安装netmask出现的问题,如下图 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解析出现问题,都指向65.49.2.178这个地址,我们下面拥有的服务器其中有一台也出现了这个问题,直接导致短信发送失败,手机信息推送也失败,支付通道出现问题无法完成支付,与第三…

Sublime Text 的快捷方式的用法

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

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

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

WPF 实现大转盘抽奖~

WPF开发者QQ群: 340500857由于微信群人数太多入群请添加小编微信号yanjinhuawechat 或 W_Feng_aiQ 邀请入群需备注WPF开发者 PS:有更好的方式欢迎推荐。接着上一篇圆形控件01—代码如下一、创建 PrizeItemControl.cs代码如下。using System; using Syste…

如何隐晦地表达“滚”?

1 学到了!现在开始带薪难过(素材来源网络,侵删)▼2 实力演绎什么叫祸不单行(素材来源网络,侵删)▼3 报了驾校之后鞋子都不敢换了(素材来源网络,侵删)▼4 糊…

Beyond Compare中插入表格数据的教程

众所周知,Beyond Compare是目前市面上功能最强大的文件对比软件,也是类似软件中使用最广泛的一种,Beyond Compare支持文件夹对比,文本对比,表格对比,图片对比,注册表对比,Mp3对比。对…

EF Core 6 新功能汇总(二)

继上一篇之后,这一篇将给大家带来另外十个 EF Core 6 中的新功能特性,包括值转换器、脚手架和 DbContext 的改进等。1HasConversion 支持值转换器在 EF Core 6.0 中,HasConversion 方法的泛型重载方法可以指定内置或自定义的值转换器。public…

linux之lsusb命令和cd -命令使用总结

1、lsusb命令介绍 使用 lsusb 来列出 USB 设备和它的属性,lsusb 会显示驱动和内部连接到你系统的设备。直接在控制台输入 lsusb 即可 2、lsusb简单使用 在控制台输入 lsusb 效果如下 系统中同时使用了 USB 2.0 root hub 驱动和 USB 3.0 root hub 驱动。 bus 002 指明设备…

Fiddler (五) Mac下使用Fiddler

http://www.cnblogs.com/TankXiao/archive/2013/04/18/3027971.html Fiddler是用C#开发的。 所以Fiddler不能在Mac系统中运行。 没办法直接用Fiddler来截获MAC系统中的HTTP/HTTPS, Mac 用户怎么办呢? Fiddler可以允许“远程连接”。 我们可以利用这个间接来实…