Calling a Method by Its Name

There are different ways to call methods only by a string that contains their name. The simplest way is to use Visual Basic .NET’s CallByName method. The listing below shows some samples of method calls using this method:

Dim mm As New CallByNameDemo()
CallByName(mm, "ShowMessage", CallType.Method)
CallByName( _
    mm, _
    "PrintTexts", _
    CallType.Method, _
    New String(2) {"Text 1", "Text 2", "Text 3"}, _
    2 _
CallByName(mm, "SampleProperty", CallType.Set, "MyValue")
Console.WriteLine( _
    "MakeDouble(""Hello"") returns ""{0}""", _
     CallByName(mm, "MakeDouble", CallType.Method, "Hello") _


Public Class CallByNameDemo
    Public Sub ShowMessage()
        Console.WriteLine("This is a message.")
    End Sub

    Public Function PrintTexts( _
        ByVal Texts() As String, _
        ByVal Times As Integer _
    ) As Boolean
        For Times = 1 To Times
            For i As Integer = 0 To Texts.Length - 1
            Next i
        Next Times
    End Function

    Public WriteOnly Property SampleProperty() As String
        Set(ByVal Value As String)
            Console.WriteLine( _
                "'SampleProperty' was set to ""{0}"".", _
                Value _
        End Set
    End Property

    Public Function MakeDouble(ByVal Text As String) As String
        Return Text & Text
    End Function
End Class

An alternative, more low-level solution is based on reflection, which is provided by the .NET Framework. The method Type.InvokeMember can be used to invoke a method on an object. The documentation of this method contains some samples on how to use it to access fields, constructors, methods, and properties: Type.InvokeMember Method (System) – Microsoft Docs.