什么是C#中的反映,有什么好处。如何使用它来获得益处

时间:2010-06-23 12:31:24

标签: c# .net reflection

我正在msdn上阅读一篇关于reflection的文章,但我甚至无法理解它的好处及其用途。

请您简要介绍一下反思是什么,以及如何从中受益。

6 个答案:

答案 0 :(得分:47)

Reflection允许您编写可以检查代码本身的各个方面的代码。

它使您可以执行以下简单的操作:

  1. 在运行时检查对象的类型(例如,对typeof()的简单调用)

  2. 在运行时检查对象的属性以更改方法的行为(.NET中的各种序列化方法)

  3. 更复杂的任务,如:

    1. 在运行时加载程序集,查找特定类,确定它是否与给定接口匹配,以及动态调用某些成员。
    2. 较早的是更常见的用法。后者有助于为其应用程序或希望在运行时根据配置更改交换程序集的人员开发插件体系结构。

答案 1 :(得分:13)

Reflection是一种在运行时以编程方式发现Types的方法。这非常重要,因为.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

当然,这一般是一小部分反射。如果您想了解有关反射的一般用法的更多信息,请查看第16章Apress Pro C# 2008 and the .NET 3.5 Platform, Fourth Edition。它深入研究.NET类型系统以及如何在库中和运行时使用它。

答案 2 :(得分:9)

Reflection允许您的代码调用编译代码时您不知道的方法和属性。其中一个使用它的内置类是XmlSerializer。您可以将任何要转换为XML的对象传递给它。它询问对象所有属性使用反射的是什么,然后能够创建一个包含表示对象所需元素的XML文档。

答案 3 :(得分:5)

反思是类型提供自身信息的能力。例如,程序集可以告诉您它包含的内容,类型可以告诉您它的方法,属性等。

动态提供此信息在很多方面都很有用。要考虑的一个简单示例是Web服务使用的元数据 - 当一个人“使用”Web服务时,会为其客户生成一个代理类。此代理是从WSDL文档生成的,通常是通过反射生成的类型元数据生成的。

另一个简单的例子是动态加载类型以执行某些工作单元。我工作的一个项目利用反射从数据库加载“规则”以应用于系统中的输入。

答案 4 :(得分:1)

Reflection可帮助您进行元编程,这无疑是最酷的编程技术之一。谷歌进行元编程以获取更多信息。

答案 5 :(得分:0)

反射是asp.net中可用的强大命名空间。通过使用它,我们可以创建动态对象运行时并调用它。它主要用于开发框架类型应用程序。