2010-06-23 37 views
26

我在msdn上阅读了一篇关于reflection的文章,但我甚至无法理解它的利用率,即10%。什么是C#反射,有什么好处。如何使用它来获得好处

请您简单介绍一下我的反思,以及如何从中受益。

+0

可能的重复:http://stackoverflow.com/questions/1897712 ... http://stackoverflow.com/questions/1859902 – 2010-06-23 12:35:57

+0

[反射。我们可以使用它来实现什么?](http://stackoverflow.com/questions/1897712/reflection-what-c​​an-we-achieve-using-it) – 2010-06-23 12:39:00

+0

对所有人:我仍然无法得到,我是如何得到好处的。你们中的任何一个人都可以引用一个最简单的例子:编码帮助代码更具可重用性和功能方面的优势 – 2010-06-23 12:53:53

回答

5

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

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

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

7

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

37

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

它可以让您做简单的事情,如:

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

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

更复杂的任务如:

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

较早的是更为常见的用法。后者对于为其应用程序的插件架构开发人员或希望在运行时交换程序集的人员有所帮助,具体取决于配置更改。

12

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

1

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

0

一个反思的好处是,它可以让您保存在数据集设计就像一个事务中的所有变化,SQL

0

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

+2

反射不属于ASP.NET或任何其他.NET技术,因为它是调查无论您使用的项目类型如何,都可以在运行时装配一个Assembly。 – graumanoz 2017-02-06 07:11:46