我在 msdn 上读了一篇关于 反射 的文章,但我连它的好处和用法都没有理解10%。
请您能否提供一些简要概述,什么是反射以及如何从中受益。
我在 msdn 上读了一篇关于 反射 的文章,但我连它的好处和用法都没有理解10%。
请您能否提供一些简要概述,什么是反射以及如何从中受益。
反射允许您编写能够检查代码自身各个方面的代码。
它使您可以执行简单的操作,例如:
在运行时检查对象的类型(例如对typeof()
的简单调用)
检查对象的属性以在运行时更改方法的行为(.NET中的各种序列化方法)
还可以执行更复杂的任务:
前者是更常见的用法。后者对于开发人员在其应用程序中工作的插件架构或希望根据配置更改在运行时交换程序集的人非常有用。
http://jagregory.com/writings/introduction-to-static-reflection/
http://www.lostechies.com/blogs/gabrielschenker/archive/2009/02/03/dynamic-reflection-versus-static-reflection.aspx
反射可以让您的代码在编译代码时不知道方法和属性的情况下调用它们。使用这个功能之一的内置类是XmlSerializer。您可以传递任何要转换为XML的对象给它。它使用反射询问对象的所有属性,然后能够创建一个包含所需元素以表示该对象的XML文档。
反射是类型提供自身信息的能力。例如,一个程序集可以告诉您它包含什么内容,一个类型可以告诉您它的方法、属性等等。
动态提供这些信息在许多方面都很有用。一个简单的例子是 Web 服务使用的元数据 - 当一个人“消费”一个 Web 服务时,为他们的客户端生成代理类。这个代理是从 WSDL 文档生成的,而这个文档通常是通过反射生成的类型元数据生成的。
另一个简单的例子是动态加载类型以执行某个工作单元。我参与过的一个项目利用反射从数据库中加载“规则”,以应用于系统中的输入。
反射帮助你进行元编程,这无疑是最酷的编程技术之一。搜索元编程以获取更多信息。
反射的好处之一是它允许您像 SQL 中的事务一样保存数据集设计器中的所有更改。