[译]反射(Reflection)和动态(dynamic)
反射
当我们需要检查,调用一个程序集的内容的时候,用反射,比如,当VS给智能提示的时候,就应用了反射。
简单用法实例:
var myAssembly = Assembly.LoadFile(@"C:\ClassLibrary1.dll"); var myType = myAssembly.GetType("ClassLibrary1.Class1"); dynamic objMyClass = Activator.CreateInstance(myType); // 获取类的类型信息 Type parameterType = objMyClass.GetType(); // 浏览方法 foreach (MemberInfo objMemberInfo in parameterType.GetMembers()) {Console.WriteLine(objMemberInfo.Name);} // 浏览属性. foreach (PropertyInfo objPropertyInfo in parameterType.GetProperties()) {Console.WriteLine(objPropertyInfo.Name);} //开始调用 parameterType.InvokeMember("Display",BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.InvokeMethod | BindingFlags.Instance,null, objMyClass, null);
实际一点的用处呢:
1.当你也要开发一个类似VS的编辑器的时候,要提供智能提示就需要反射
2.当创建单元测试框架的时候,为了测试需要动态调用方法和属性的时候
3.有时候我们想把类型的属性,方法等全部导出的时候
动态dynamic
编程语言分为强/弱类型,dynamic是弱类型,此关键字会让编译器不做编译时的类型检查,只做运行时的检查。
dynamic x = "c#"; x++;
所以上面这行代码可以编译通过,但会产生运行时一场。
实际用处:
最多的就是通过互操作来操作Office组件的时候了
没有dynamic的时候
/ Before the introduction of dynamic. Application excelApplication = new Application(); ((Excel.Range)excelApp.Cells[1, 1]).Value2 = "Name"; Excel.Range range2008 = (Excel.Range)excelApp.Cells[1, 1];
有了dynamic之后世界就不一样了
dynamic excelApp = new Application(); excelApp.Cells[1, 1].Value = "Name"; Excel.Range range2010 = excelApp.Cells[1, 1];
两者的区别和联系呢
1.当我们想要在运行时操作一个对象的时候,就会用到这两个
2.反射可以用来检测对象的元数据,也能在运行时调用对象的方法和属性
3.dynamic是.net 4.0新出的关键字,知道方法被调用的时候,编译器才会晓得这个方法到底有还是没有。
4.dynamic内部是使用反射来实现的,它缓存了方法调用来提高性能
5.反射可以调用公有和私有成员,而dynamic智能调用用公有成员
6.dynamic是实例相关的,无法访问静态成员,这种情况下使用反射吧。
Reflection | Dynamic | |
Inspect (meta-data) | Yes | No |
Invoke public members | Yes | Yes |
Invoke private members | Yes | No |
Caching | No | Yes |
Static class | Yes | No |
再来一张图...

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 单线程的Redis速度为什么快?
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库