【发布时间】:2012-01-09 14:21:28
【问题描述】:
我正在用 C# 编写一个库,我必须调用其他程序员在他们的类中定义的一些方法,所以我不知道参数的类型和数量。例如,
Class exampleClass{
void method1(int param1, double param2){...}
bool method2(){...}
object method3(string param1){....}
}
在我的程序中,我想调用这些方法。由于我不知道它们的参数和返回类型,我不能使用“delegate”(具有已知类型和参数),但在运行时,我可以使用例如反射来提取类中的方法及其参数(“MethodInfo”),但如何使用这些信息来调用方法? (假设我可以生成适当的值用作方法的参数)。
谢谢
PS:我知道“params object []”方法,但它会迫使程序员使用“params”对象,而不是在他们的方法中定义它们通常的参数。所以,我不想使用这种方法。
【问题讨论】:
-
无论如何你会为参数传递什么参数?如果您可以提供有关上下文的更多信息,那将使生活变得更加轻松。
-
请详细介绍一下上下文。如果您或人们不知道方法的签名,他们将如何使用它?看起来好像很容易出错并传递不正确的变量。如果您有权访问这些类,为什么您无法提取定义?
-
@Jon Skeet:您可以假设我将为每个参数提供默认值,或者假设参数在有限的已知集合内,并且对于每种类型,我都有一个创建值的过程那种类型。
-
@oleksii:在运行时并使用反射,我可以获得每个方法的签名作为“MethodInfo”,其中包含有关方法名称和类型以及每个参数类型的信息.事实上,我正在编写一个模拟器程序,使用我的程序的人将编写一个包含一些方法的类(并为每个方法定义一些属性),在运行时,我编译代码并获取有关每个方法的信息并然后,调用其中一些方法。