2008-10-31 6 views
0

J'essaie d'utiliser reflector.InvokeMethod pour appeler une fonction avec un paramètre optionnel. La fonction ressemble à ceci:en utilisant la méthode Reflector.Invoke sur les fonctions avec les paramètres optionnels

Private Function DoSomeStuff(ByVal blah1 as string, ByVal blah2 as string, Optional ByVal blah3 as string = "45") as boolean 
'stuff 
end function 

et j'Invoquer comme ceci:

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

Cela fonctionne bien, autre que quand je ne passe pas le troisième paramètre (en option), il N'atteignez pas la fonction.

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

Est-il possible que je peux utiliser Reflector.invokeMethod pour appeler cette fonction sans passer le paramètre optionnel? ou un autre moyen d'y parvenir?

Répondre

0

Je surcharge la méthode DoSomeStuff plutôt que d'utiliser un paramètre optionnel ...

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

Le compilateur Visual Basic substitue en fait les valeurs des paramètres optionnels dans le code d'appel. Donc, si votre code actuel a été:

DoSomeStuff(blah1, blah2)

Visual Basic aurait émis un code IL équivalent à:

DoSomeStuff(blah1, blah2, "45")

Pour savoir ce que dernier paramètre est, vous aurez besoin d'obtenir une référence au paramètre de object (Je ne suis pas sûr de ce que c'est dans Reflector - in .NET, vous auriez accès à MethodInfo, puis à ParameterInfo), puis récupérez ses attributs personnalisés, en recherchant un attribut marqué avec OptionalAttribute et DefaultParameterValueAttribute. Ensuite, vous devrez l'appeler avec le troisième paramètre, en fournissant la valeur de DefaultParameterValueAttribute.

Questions connexes