VS2010的新特性:3.新要害词 - Dynamic
在DotNet 4.0中新增了一个类型:dynamic,它是一个静态类型,但在编译时它会绕过静态类型的检查,它将在程序运行时赋予动态对象时再确认赋予的类型。
下面我们来看一段代码:
public static void Main(string[] args)
{
dynamic dyn = 10;
dyn = dyn + 10;
Console.WriteLine(dyn);
dyn = dyn + 10.02;
Console.WriteLine(dyn);
dyn = "asdfg";
Console.WriteLine(dyn);
}
我们来看一下结果:
20
20.02
asdfg
dyn的类型从int到double再到string类型在不断地变化。在编译时dynamic被直接绕过,并没有检查其类型。
来看一下dynamic 同object和var的区别,
object:
public static void Main(string[] args)
{
object dyn = 10;
dyn = dyn + 10; //编译时这里会报错误,object不能在int类型之间使用“+”.要执行类型转化后才能执行操作,(int)dyn + 10
Console.WriteLine(dyn);
}
var:
public static void Main(string[] args)
{
var dyn = 10;
dyn = "abc"; //编译时这里会报错误,类型错误。因为在编译时dyn已经被赋予了int类型
Console.WriteLine(dyn);
}
dynamic运行时动态的赋予类型,object使用时需要显式转换到你期望的类型,var编译时会反向推断并确认类型。
再看下面一段代码:
public static void Main(string[] args)
{
Assembly asm = Assembly.LoadFile("xxxx.dll");
dynamic dyn = asm.CreateInstance("MyAss.ClassName");
dyn.Show("dynamic!");
}
这是dynamic替代反射调用函数,它极大的简化了操作,让我们在编程时更加的轻松愉快^_^。
最后提一下,你可能在以下情况会使用到dynamic:
自动反射
COM组件互操作
混合编程,例如IronRuby和 IronPython
处理Html DOM对象
还有更多的VS2010新特性,将在以后的文章中出现。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· DeepSeek火爆全网,官网宕机?本地部署一个随便玩「LLM探索」
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 上周热点回顾(1.20-1.26)
· 【译】.NET 升级助手现在支持升级到集中式包管理