【问题标题】:.NET Introspection VS Reflection.NET 内省 VS 反射
【发布时间】:2008-09-16 15:06:58
【问题描述】:

.NET 中的自省和反射有什么区别

【问题讨论】:

  • 您可能需要更具体地了解“内省”的含义。你的意思是像Mono.Cecil?还是 FxCop?还是其他具体的东西?

标签: .net reflection introspection


【解决方案1】:

它们是同一个整体的两个部分。

自省是指一个类“内部”观察自身的能力,例如,一个方法采用什么参数,它的成员的名称是什么,等等。

反射是 .NET 如何实现自省的特定名称。其他语言可能称之为不同的东西(C++ 将其有限的自省称为 RTTI,用于运行时类型信息)。

【讨论】:

  • +1 - 我不知道另一个答案如何获得更多选票,这实际上回答了这个问题。
  • 在 .NET 中,特别是在 Microsoft.Cci.dll 中,自省是指检查程序集而不将其加载到 ApplicationDomain 中的过程。反射需要加载程序集。从这个意义上说,反射查看构成当前流程的类型,而自省是流程查看不在“内部”自身的程序集的一种方式
【解决方案2】:

自省是通过FxCop in 2004 as an alternative to Reflection 引入的:

FxCop 1.30 的新功能是它 现在通过 a 执行分析 称为内省的技术。这 Introspection 引擎的使用允许 更快的分析和支持 多线程分析。不像 以前的反射引擎 版本,在 Introspection 引擎中 您正在分析的程序集是 未锁定,因此您无需关闭 关闭 FxCop 进行修复并重新编译 那些组件。最后, 内省引擎提供了很多 更丰富的分析基础设施 与反射引擎相比。

【讨论】:

  • 这句话指出了这一点,但并没有直接指出 .NET 世界的不同之处。反射只能针对加载的程序集,并且受限于 CLI 类型系统中的元数据。相比之下,自省查看外部程序集,基本上可以访问文件中的所有二进制数据。这意味着自省不受类型系统的限制,因此可以推断出未通过类型系统公开的其他细节。
猜你喜欢
  • 2011-01-03
  • 2011-09-09
  • 1970-01-01
  • 2013-10-18
  • 2014-06-25
  • 1970-01-01
  • 1970-01-01
  • 2011-01-18
  • 2021-11-15
相关资源
最近更新 更多