.NET内省与反射

5
在.NET中,内省和反射有什么区别?

你可能需要更明确地表达你所指的“内省”。你是指像Mono.Cecil这样的吗?还是FxCop?或者是其他具体的东西? - Curt Hagenlocher
2个回答

12

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

内省指的是一个类能够“内部”查看自身并了解方法参数、成员名称等信息的能力。

反射是.NET实现内省的具体名称。其他语言可能会称之为不同的名称(例如,C++将其有限的内省称为运行时类型信息RTTI)。


+1 - 我不知道其他答案怎么得到了更多的投票,这个实际上回答了问题。 - Seth
1
在.NET中,特别是在Microsoft.Cci.dll中,内省是指在不将程序集加载到ApplicationDomain中的情况下检查程序集的过程。反射需要加载程序集。从这个意义上讲,反射查看组成当前进程的类型,而内省是一种进程查看不在其内部的程序集的方式。 - Patrick Hallisey

7

Introspection是在2004年作为Reflection的替代品被引入FxCop。FxCop 1.30中的新功能是通过一种称为Introspection的技术进行分析。使用Introspection引擎可以实现更快的分析并支持多线程分析。与以前版本的Reflection引擎不同,在Introspection引擎中,您正在分析的程序集不会被锁定,因此您无需关闭FxCop来修复和重新编译这些程序集。最后,与Reflection引擎相比,Introspection引擎提供了更丰富的分析基础设施。


1
这句话说得很到位,但并没有直接指出.NET世界中的区别。反射只能针对已加载的程序集,并且受CLI类型系统元数据的限制而无法执行某些操作。相比之下,内省则查看外部程序集,并且可以基本上访问文件中的所有二进制数据。这意味着内省不受类型系统的限制,因此可以推断出通过类型系统未公开的其他细节。 - Ubiguchi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接