2008-10-31 5 views
0

reflector.InvokeMethod를 사용하여 선택적 매개 변수로 함수를 호출하려고합니다. 기능은 다음과 같습니다Reflector.Invoke 메서드를 사용하여 옵션 매개 변수로

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) 

나는 그것을 세 번째 (선택 사항) 매개 변수를 전달하지 않는 경우 dosn't는 기능을 쳤다.

Dim result As Boolean = Reflector.InvokeMethod(AccessModifier.private,obj_of_Class, "DoSomeStuff", Param1, Param2) 

내가 옵션 매개 변수를 전달하지 않고이 함수를 호출 할 Reflector.invokeMethod를 사용할 수있는 방법이 있습니까? 또는 이것을 달성하는 다른 방법은?

답변

0

나는

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 
2

은 Visual Basic 컴파일러는 실제로 호출 코드에 선택적 매개 변수 값을 대체 ... DoSomeStuff 방법에 과부하가 아닌 선택적 매개 변수를 사용합니다. 그래서 실제 코드 인 경우 :

DoSomeStuff(blah1, blah2)

Visual Basic에서 방출되는 것 IL 코드에 해당 :

DoSomeStuff(blah1, blah2, "45")

이 마지막 매개 변수, 당신은 매개 변수의에 대한 참조를 가져해야 무엇인지 알고 개체 (Reflector에 무엇이 있는지 잘 모르겠다. .NET에서는 MethodInfo에 액세스하고 ParameterInfo에 액세스 할 수 있음) 다음에 사용자 지정 특성을 가져 와서 OptionalAttribute 및 DefaultParameterValueAttribute로 표시된 특성을 찾습니다. 그런 다음 DefaultParameterValueAttribute의 값을 제공하는 세 번째 매개 변수를 사용하여이 매개 변수를 호출해야합니다.

관련 문제