var和dynamic的区别及如何正确使用dynamic ?
C#中的很多关键词用法比较容易混淆,var和dynamic就是其中一组,他们都可以申明动态类型的变量,但是本质上他们还是有不少区别的。var 在编译阶段已经确定类型,在初始化时候,必须提供初始化的值,而dynamic则可以不提供,它是在运行时才确定类型。
1 //var 在编译阶段已经确定类型 2 // var varError; 3 var isIntType = 3; 4 isIntType.ToString(); 5 //dynamic在编译期间不进行任何 6 //的类型检查,而是将类型检查放到 7 //了运行期 8 dynamic dyn = 3; 9 // dynamic dynOk; 10 dyn = "hello world"; 11 //error 字符串没有 [ fn不存在的方法 ] 的方法 12 //但在语法检查时通过,不会提示语法错误 13 var s = dyn.fn不存在的方法();//runtime error
由于dynamic在运行时才检查类型,所以有时候会出现错误,因此使用它必须得法,那么何时使用它比较方便呢?我们先定义一个Person类,然后用反射进行动态调用起Talk方法:
1 class Person 2 { 3 public void Talk(string msg) 4 { 5 MessageBox.Show(msg); 6 } 7 }
1 //dynamic 在反射时候可以简化代码 2 System.Type t = typeof(Person); 3 var obj = Activator.CreateInstance(t, null); 4 t.InvokeMember("Talk", System.Reflection.BindingFlags.InvokeMethod, null, obj, new object[] { "hell world!" });
在反射的时候,传统的方法的方法调用往往比较繁琐,而用dyanmic则非常简化,而且直观:
1 dynamic obj2 = Activator.CreateInstance(t, null); 2 obj2.Talk("hell world!");
因此,dynamic只要使用得法,还是一个C#一个非常好的特征。
水平有限,望各位园友不吝赐教!如果觉得不错,请点击推荐和关注!
出处:http://www.cnblogs.com/isaboy/
声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://www.cnblogs.com/isaboy/
声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?