首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在具有可选参数的函数上使用Reflector.Invoke方法

在具有可选参数的函数上使用Reflector.Invoke方法
EN

Stack Overflow用户
提问于 2008-10-31 00:40:56
回答 2查看 1.1K关注 0票数 0

我正在尝试使用reflector.InvokeMethod来调用一个带有可选参数的函数。该函数如下所示:

代码语言:javascript
复制
Private Function DoSomeStuff(ByVal blah1 as string, ByVal blah2 as string, Optional ByVal blah3 as string = "45") as boolean
'stuff
end function

我是这样调用它的:

代码语言:javascript
复制
Dim result As Boolean = Reflector.InvokeMethod(AccessModifier.private,obj_of_Class, "DoSomeStuff", Param1, Param2, Param3)

这很好用,除了当我没有传递第三个(可选)参数时,它不会命中函数。

代码语言:javascript
复制
Dim result As Boolean = Reflector.InvokeMethod(AccessModifier.private,obj_of_Class, "DoSomeStuff", Param1, Param2)

有没有一种方法可以使用Reflector.invokeMethod调用这个函数而不传递可选参数?或者是另一种实现这一目标的方法?

EN

回答 2

Stack Overflow用户

发布于 2008-11-25 23:06:13

Visual Basic编译器实际上将可选参数值替换到调用代码中。因此,如果您的实际代码是:

代码语言:javascript
复制
DoSomeStuff(blah1, blah2)

Visual Basic将发出与以下内容等效的IL代码:

代码语言:javascript
复制
DoSomeStuff(blah1, blah2, "45")

要知道最后一个参数是什么,您需要获取对参数对象的引用(我不确定反射器中是什么-在.NET中,您将获得对MethodInfo的访问权限,然后是对ParameterInfo的访问权限),然后获取其自定义属性,查找标记为OptionalAttribute和DefaultParameterValueAttribute的属性。然后,您需要使用第三个参数调用它,并提供来自DefaultParameterValueAttribute的值。

票数 2
EN

Stack Overflow用户

发布于 2008-11-25 22:57:34

我会重载DoSomeStuff方法,而不是使用可选参数...

代码语言:javascript
复制
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 Function
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/252260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档