我正在尝试使用reflector.InvokeMethod来调用一个带有可选参数的函数。该函数如下所示:
Private Function DoSomeStuff(ByVal blah1 as string, ByVal blah2 as string, Optional ByVal blah3 as string = "45") as boolean
'stuff
end function我是这样调用它的:
Dim result As Boolean = Reflector.InvokeMethod(AccessModifier.private,obj_of_Class, "DoSomeStuff", Param1, Param2, Param3)这很好用,除了当我没有传递第三个(可选)参数时,它不会命中函数。
Dim result As Boolean = Reflector.InvokeMethod(AccessModifier.private,obj_of_Class, "DoSomeStuff", Param1, Param2)有没有一种方法可以使用Reflector.invokeMethod调用这个函数而不传递可选参数?或者是另一种实现这一目标的方法?
发布于 2008-11-25 23:06:13
Visual Basic编译器实际上将可选参数值替换到调用代码中。因此,如果您的实际代码是:
DoSomeStuff(blah1, blah2)Visual Basic将发出与以下内容等效的IL代码:
DoSomeStuff(blah1, blah2, "45")要知道最后一个参数是什么,您需要获取对参数对象的引用(我不确定反射器中是什么-在.NET中,您将获得对MethodInfo的访问权限,然后是对ParameterInfo的访问权限),然后获取其自定义属性,查找标记为OptionalAttribute和DefaultParameterValueAttribute的属性。然后,您需要使用第三个参数调用它,并提供来自DefaultParameterValueAttribute的值。
发布于 2008-11-25 22:57:34
我会重载DoSomeStuff方法,而不是使用可选参数...
Private Overloads Function DoSomeStuff(ByVal blah1 As String, ByVal blah2 As String) As Boolean
Return DoSomeStuff(blah1, blah2, "45")
End Function
Private Overloads Function DoSomeStuff(ByVal blah1 As String, ByVal blah2 As String, ByVal blah3 As String) As Boolean
'stuff
End Functionhttps://stackoverflow.com/questions/252260
复制相似问题