Pages

Friday, February 15, 2013

Call a Function or Subroutine with its string name using the Invoke method

VB 6 introduced the CallByName() function, which allows you to call a function or subroutine using the subroutine or function name stored as a string value. While this function still works in VB. NET, you do have another option. You can use the Invoke() method of the MethodInfo class. This class is a member of the System.Reflection namespace and it provides access to a method’s metadata. Consider the following subroutine:

Public Sub CallMe(ByVal arg1 As String, ByVal arg2 As String)
      'do something
End Sub


To call this subroutine using the Invoke method, you can use code similar to the following:

Dim SubName As String = "CallMe"
Dim arguments() As String = {"Hello ", "world."}
Dim PageType As Type = Me.GetType()
Dim MyMethod As System.Reflection.MethodInfo =
   PageType.GetMethod(SubName)
MyMethod.Invoke(Me, arguments)

The GetMethod() method obtains information about the CallMe() function and the Invoke() method calls it using the argument list.

This is an excellent tool to help you streamline your code if you have several different functions, but you won’t know which one to call until runtime. For example, if you have a new edit and delete routine for updating database records, instead of using an If..Then or Case statement to call the right method, just link the name of each method to the user’s requested action.


No comments:

Post a Comment

Note: Only a member of this blog may post a comment.