反射调用技术示例

更新:2007 年 11 月

本示例说明如何用公共类和方法实现对任何托管程序集的后期绑定。从命令行选择程序集、类型、方法和参数。此示例将尝试加载程序集、定位类型和方法并通过所传递的参数调用方法。此示例甚至会为采用非字符串参数的方法调用进行必要的类型转换。反射类使得这种高级功能变得异常简单。此示例中包括一个名为 Tester.dll 的简单 DLL 项目。这个 Tester 项目提供了一个简单的类型,其中包含一些要尝试用于 Invoke 示例的方法。

有关使用这些示例的信息,请参见下面的主题:

Download sample

使用命令提示生成示例

  1. 定位到该示例的语言特定子目录之一。

  2. 根据所选的编程语言,在命令行中键入 msbuild InvokeCS.sln 或 msbuild InvokeVB.sln。

使用 Visual Studio 生成示例

  1. 打开 Windows 资源管理器,然后定位到该示例的语言特定子目录之一。

  2. 根据所选择的编程语言,双击 InvokeCS.sln 或 InvokeVB.sln 的图标,从而在 Visual Studio 中打开该文件。

  3. 在“生成”菜单上单击“生成解决方案”。

d8ba5k1h.alert_note(zh-cn,VS.90).gif说明:

此示例生成一个控制台应用程序。您必须在命令提示窗口中启动它才能查看相应的输出。

Invoke.exe 接受指示调用对象的命令行参数。如果不带任何参数运行,则将显示示例用法。请使用下面的语法调用类型上的方法:

Invoke.exe [Assembly] [Type] [Method] [Parameters...]  

运行示例

  1. 定位到包含 Invoke.exe 和 Tester.dll 的目录。

  2. 在命令行上键入 Invoke.exe [程序集] [类型] [方法] [参数...]。

备注

msbuild 工具生成 Invoke.exe 和 Tester.dll 这两个文件。

下面的示例使用三个参数来调用类型 SomeType 上的 ShowMessage 方法,例如:

Invoke.exe Tester.dll Microsoft.Samples.SomeType ShowMessage "This is an example of a message." "Question:" 4

有关反射调用的更多信息,请参见源代码文件中的注释。

下面各项简要介绍本示例使用的技术和类:

  • 反射

    • Assembly用于加载程序集和搜索该程序集中的类型。

    • Type 用于获取 MemberInfo 实例的数组以及根据需要在创建实例时引用某类型。

    • MethodInfo 用于发现有关单个方法的信息,包括参数和方法名。此示例将该类型中的信息与命令行上提供的信息进行比较。MethodInfo 也可用于调用方法。

    • ParameterInfo 主要用于查找方法参数的类型,以便此示例能够适当地强制转换命令行参数。

    • Activator 用于创建某类型的实例(如果示例发现需要对实例方法进行调用)。

  • 系统

    • Array 用于将一个数组的一部分复制到另一个数组。

    • Convert 用于尝试将类型为 String 的命令行参数强制转换为对于传递给给定类型的方法的参数而言适当的类型。

请参见

参考

Activator

Array

Assembly

AssemblyBuilderAccess

Convert

MethodAttributes

MethodInfo

ParameterInfo

System.Reflection

Type

其他资源

反射

发出动态方法和程序集

动态源代码生成和编译