在.NET中,反射有什么用途?

9

当其他方法都无法奏效时,它就派上用场了。就像在Web世界中的JavaScript一样。 :) - Arnis Lapsa
2
重复链接:https://dev59.com/mnRC5IYBdhLWcg3wCMnX另外一个链接:https://dev59.com/enRA5IYBdhLWcg3wsgBP - Shog9
6个回答

11
假设你正在编写一个基本的序列化程序,该程序将任何对象序列化为XML。如何使它足够通用,以便它可以适用于任何对象?如果你有一个类,其中你知道所有属性,那么你可以轻松地编写一个"ToXml()"函数,在其中手动将所有属性写成XML格式。但是,如果你想将其扩展到任何对象中,你就需要在运行时反射对象的属性,并将它们写入XML文件。
还有许多其他用途,这只是我想到的第一个用途。

5

反射有许多用途。.NET Framework将其用于序列化数据绑定,还可以用于创建像Reflector、FxCop和NUnit这样检查代码的工具,以及ORM数据库框架。它在运行时有广泛的用途,从记录对象的特定信息到依赖注入框架。它还可以用于在运行时动态执行方法或设置属性,就像使用自定义属性一样。它还可以用于更高级的编程,例如元编程和自修改代码。


3
我认为反射的维基百科文章相当不错:
在计算机科学中,反射是一种计算机程序可以观察和修改自身结构和行为的过程。由反射驱动的编程范例称为反射式编程。它是元编程的一种特殊形式。
在许多计算机架构中,程序指令被存储为数据 - 因此指令和数据之间的区别仅仅是计算机和编程语言如何处理信息的问题。通常,“指令”被“执行”,“数据”被“处理”;然而,在某些语言中,程序也可以将指令视为数据,从而进行反射性修改。反射最常用于高级虚拟机编程语言,如Smalltalk和脚本语言,较少用于明显类型化和/或静态类型化的编程语言,如Java和C。
反射允许您在执行时获取有关对象类型的信息。这在许多情况下都很有用,包括(但不限于)序列化和对象关系映射。

3

它用于元编程,这是指当您编写关于代码本身而不是通常的业务问题时所使用的编程方式。


2

当测试应用程序时,使用反射也非常有用,例如单元测试或其他类型的测试框架。通过使用反射,您可以创建一个XML文件(或其他适当格式的输入数据文件),让您的程序分析它并调用在文件中定义的方法。这就是Fitnesse的工作原理。


1

反射是在编译时不知道对象是什么或要执行什么操作或在哪个属性上使用的技术...

您可以使用反射在给定程序集中查找所有类型为X的对象,或通过名称调用某些方法(从数据库或配置文件中获取),同样适用于设置属性等...这些都是我们使用它的情况。


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