我正在学习反射,对于这个概念我有一些了解,但并不是全部。我们为什么需要反射?有哪些事情是我们无法通过其他方式实现,必须使用反射来完成的呢?
我正在学习反射,对于这个概念我有一些了解,但并不是全部。我们为什么需要反射?有哪些事情是我们无法通过其他方式实现,必须使用反射来完成的呢?
反射提供了很多场景,但我主要将它们分为两个类别:
例如,考虑一个有关程序集最基本问题:其中有哪些类型?程序集是自描述的,而反射是使该描述浮出水面并可用于其他代码的机制。
例如,假设您想编写一个程序,该程序获取一个程序集并在图形界面中显示该程序集中各个类之间的关系,以帮助您理解代码。有这样的工具,它们在Visual Studio中。 某人编写了这些工具。 它们不是通过魔法出现的。 反射是设计到.NET框架中的机制,使您或我或任何其他人都能编写理解代码的工具。
假设您有一个静态方法Foo.Bar()
。当您在程序中调用Foo.Bar()
时,您可以百分之百确定会调用您认为将要被调用的方法。 我们称静态方法为“静态”,因为可以静态地理解名称Bar与将被调用的代码之间的绑定,即在不运行程序的情况下。
Blah()
。当你调用whatever.Blah()
时,你不知道编译时确切调用哪个Blah()
,但你知道将在运行时类型为whatever
的某个类型上调用没有参数的某个方法Blah()
,并且该类型等于或派生自声明Blah()
的类型。(实际上你知道更多: 知道它等于或派生自whatever
的编译时类型。)虚绑定是动态绑定的一种形式,但它不是完全动态的。用户无法决定这个调用应该在不同类型层次结构上的不同方法中进行调用。