可能重复:
When do you use reflection? Patterns/anti-patterns
What exactly is Reflection and when is it a good approach?
.NET中需要反思的是什么?它派上用场的情况是什么?
答案 0 :(得分:10)
假设您正在编写一个基本的序列化例程,它会将任何对象序列化为XML。你如何使它足够通用,以便它可以适用于任何对象?如果您有一个知道所有属性的类,那么您可以轻松编写“ToXml()”函数,在该函数中手动将所有属性写入XML。如果你想将它扩展到任何对象怎么办?在这种情况下,您需要在运行时反映属性,并将它们写入XML。
它有更多的用途,这是我想到的第一个用途。
答案 1 :(得分:4)
反射有很多用途。 .NET Framework将其用于serialization和data binding,它还可用于创建检查代码的工具,如Reflector,FxCop和NUnit以及ORM数据库框架。它在运行时具有多种用途,可以将有关对象的特定内容记录到Dependency Injection Frameworks。它还可以用于在运行时动态执行方法或设置属性,就像使用自定义属性一样。它还可以用于更高级别的编程,例如metaprogramming和自修改代码。
答案 2 :(得分:3)
我认为Wikipedia article on reflection非常好:
在计算机科学中,反思是 计算机程序的过程 可以观察和修改自己的 结构和行为。该 编程范式 反射被称为反射 节目。这是一种特殊的 元编程。
在许多计算机架构中, 程序指令存储为 数据 - 因此区别 指令和数据仅仅是一个 关于信息如何的问题 用电脑治疗 编程语言。一般, '指令'是'执行'和 '数据'是'已处理';然而,在 一些语言,程序也可以 将指令视为数据和 因此反思 修改。反思最多 常用于高级虚拟 机器编程语言就像 Smalltalk和脚本语言,和 不常用于明显打字 和/或静态类型编程 Java和C等语言。
Reflection允许您在执行时获取有关对象类型的信息。这在许多情况下都很有用,包括(但限于)序列化和对象关系映射。
答案 3 :(得分:3)
它用于元编程,当你编写代码本身而不是通常的业务问题时
答案 4 :(得分:2)
在测试应用程序时,它也非常有用,例如:单元测试或其他类型的测试框架。通过使用反射,您可以创建一个xml文件(或其他适当格式的输入数据文件),让程序对其进行分析并调用文件中定义的方法。这就是Fitnesse的工作方式。
答案 5 :(得分:1)
当您在编译时不知道您的对象是哪个时间或要执行的操作或属性属性时,会使用反射...
您可以使用反射来查找给定Assembly中的Type X的所有对象,或者通过它的名称(从db或config文件中获取...)调用某个方法,同样的事情来设置属性....这样的事情(这些是我们使用它的情况)