【问题标题】:what is reflection in C#, what are the benefit. How to use it to get benifit [closed]什么是 C# 中的反射,有什么好处。如何使用它来获得好处[关闭]
【发布时间】:2011-03-07 07:20:51
【问题描述】:

我在 msdn 上阅读了一篇关于 reflection 的文章,但对于它的好处和用途,我什至无法理解它的 10%。

您能否简要概述一下什么是反射以及我如何从中受益。

【问题讨论】:

标签: c# .net reflection


【解决方案1】:

反射是类型提供自身信息的能力。例如,一个程序集可以告诉你它包含什么,一个类型可以告诉你它的方法、属性等等。

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      它使您能够做一些简单的事情,例如:

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

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

      更复杂的任务,例如:

      1. 在运行时加载程序集,查找特定类,确定它是否与给定接口匹配,并动态调用某些成员。

      前面是更常见的用法。后者对于为其应用程序开发插件架构的开发人员或希望在运行时根据配置更改交换程序集的人员很有帮助。

      【讨论】:

        【解决方案4】:

        反射是一种在运行时以编程方式发现类型的方法。这非常重要,因为 .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 类型系统以及它在库中和运行时的使用方式。

        【讨论】:

          【解决方案5】:

          反射可帮助您进行元编程,这无疑是最酷的编程技术之一。谷歌元编程了解更多信息。

          【讨论】:

            【解决方案6】:

            反射的好处之一是它允许您将所有更改保存在数据集设计器中,就像 SQL 中的事务

            【讨论】:

              【解决方案7】:

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

              【讨论】:

              • 反射不是 ASP.NET 或任何其他 .NET 技术的一部分,因为它是在运行时调查程序集的能力,无论您使用的项目类型如何。
              猜你喜欢
              • 1970-01-01
              • 2017-12-07
              • 2011-04-26
              • 1970-01-01
              • 2014-02-24
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-03-24
              相关资源
              最近更新 更多