【发布时间】:2011-03-07 07:20:51
【问题描述】:
【问题讨论】:
-
致所有人:我仍然无法得到,我是如何受益的。你们中的任何人都可以举一个最简单的例子来说明它在编码方面的好处,有助于使代码更具可重用性和功能
标签: c# .net reflection
【问题讨论】:
标签: c# .net reflection
反射是类型提供自身信息的能力。例如,一个程序集可以告诉你它包含什么,一个类型可以告诉你它的方法、属性等等。
动态提供此信息在许多方面都很有用。需要考虑的一个简单示例是 Web 服务使用的元数据——当一个人“使用”Web 服务时,会为他们的客户端生成一个代理类。该代理是从 WSDL 文档生成的,并且通常是从通过反射生成的类型元数据生成的。
另一个简单的例子是动态加载类型以执行某些工作单元。我从事的一个项目利用反射从数据库中加载“规则”以应用于系统中的输入。
【讨论】:
反射让您的代码调用编译代码时您不知道的方法和属性。使用它的内置类之一是 XmlSerializer。您可以将任何要转换为 XML 的对象传递给它。它询问对象它的所有属性都在使用反射,然后能够生成一个 XML 文档,其中包含表示对象所需的元素。
【讨论】:
反射允许您编写可以检查代码本身的各个方面的代码。
它使您能够做一些简单的事情,例如:
在运行时检查对象的类型(例如对typeof() 的简单调用)
在运行时检查对象的属性以更改方法的行为(.NET 中的各种序列化方法)
更复杂的任务,例如:
前面是更常见的用法。后者对于为其应用程序开发插件架构的开发人员或希望在运行时根据配置更改交换程序集的人员很有帮助。
【讨论】:
反射是一种在运行时以编程方式发现类型的方法。这非常重要,因为 .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
当然,这只是一般反射的一小部分。如果您想了解有关反射的一般用法的更多信息,请查看Apress Pro C# 2008 and the .NET 3.5 Platform, Fourth Edition,第 16 章。它非常深入地研究了 .NET 类型系统以及它在库中和运行时的使用方式。
【讨论】:
反射可帮助您进行元编程,这无疑是最酷的编程技术之一。谷歌元编程了解更多信息。
【讨论】:
反射的好处之一是它允许您将所有更改保存在数据集设计器中,就像 SQL 中的事务
【讨论】:
Reflection 是 asp.net 中可用的强大命名空间。使用它我们可以创建动态对象运行时并调用它。它主要用于开发框架类型的应用程序。
【讨论】: