VB.NET Create Instance of a Type Dynamically

This code snippet demonstrates how to create an instance of a type dynamically in VB.NET.
  • 14030

Recently, in my components library project, I needed to create instances of types dynamically and execute their methods using dynamic types.

Activator class can be used for this purpose. The CreateInstance method of Activator class takes a type and creates a Type object. Once we have a Type object, we can use InvokeMember method to execute a member of a type.

In this following code snippet, I create a Type objet of StringBuilder and invoke Append and ToString methods of StringBuilder.

Imports System

Imports System.Text

Imports System.Reflection

 

Module Module1

 

    Sub Main()

 

        Dim dynamicType As Type = GetType(StringBuilder)

 

        ' Create an instance of a Type by calling Activator.CreateInstance

        Dim dynamicObject As Object = Activator.CreateInstance(dynamicType)

 

        ' Invoke Append method to add string to StringBuilder

        dynamicType.InvokeMember("Append", _

           BindingFlags.Public Or BindingFlags.Instance Or BindingFlags.InvokeMethod, _

           Type.DefaultBinder, dynamicObject, New Object() {"First String | "})

    

        dynamicType.InvokeMember("Append", _

           BindingFlags.Public Or BindingFlags.Instance Or BindingFlags.InvokeMethod, _

           Type.DefaultBinder, dynamicObject, New Object() {" Second String Appended "})

 

        dynamicType.InvokeMember("Append", _

          BindingFlags.Public Or BindingFlags.Instance Or BindingFlags.InvokeMethod, _

          Type.DefaultBinder, dynamicObject, New Object() {" Third String Appended "})

 

        ' Invoke ToString method to get string out of StringBuilder

        Console.Write(dynamicType.InvokeMember("ToString", _

          BindingFlags.Public Or BindingFlags.Instance Or BindingFlags.InvokeMethod, _

           Type.DefaultBinder, dynamicObject, Nothing))

 

        Console.ReadKey()

    End Sub

 

End Module

 

Categories

More Articles

© 2020 DotNetHeaven. All rights reserved.