Activator.CreateInstance Method (String, String)
Creates an instance of the type whose name is specified, using the named assembly and default constructor.
Assembly: mscorlib (in mscorlib.dll)
'Declaration Public Shared Function CreateInstance ( _ assemblyName As String, _ typeName As String _ ) As ObjectHandle
- Type: System.String
The name of the assembly where the type named typeName is sought. For more information, see the Remarks section. If assemblyName is Nothing, the executing assembly is searched.
- Type: System.String
The fully qualified name of the preferred type.
Return ValueType: System.Runtime.Remoting.ObjectHandle
A handle that must be unwrapped to access the newly created instance.
typeName is Nothing.
No matching public constructor was found.
typename was not found in assemblyName.
assemblyName was not found.
The caller does not have permission to call this constructor.
You cannot create an instance of an abstract class, or this member was invoked with a late-binding mechanism.
The constructor, which was invoked through reflection, threw an exception.
assemblyName is not a valid assembly.
The common language runtime (CLR) version 2.0 or later is currently loaded, and assemblyName was compiled for a version of the CLR that is later than the currently loaded version. Note that the .NET Framework versions 2.0, 3.0, and 3.5 all use CLR version 2.0.
An assembly or module was loaded twice with two different evidences.
The assembly name or code base is invalid.
Use ObjectHandle.Unwrap to unwrap the return value.
assemblyName can be either of the following:
The simple name of an assembly, without its path or file extension. For example, you would specify TypeExtensions for an assembly whose path and name are .\bin\TypeExtensions.dll.
The full name of a signed assembly, which consists of its simple name, version, culture, and public key token; for example, "TypeExtensions, Version=18.104.22.168, Culture=neutral, PublicKeyToken=181869f2f7435b51".
For more information on how the common language runtime identifies and loads assemblies, see How the Runtime Locates Assemblies. For information on using the application configuration file to define assembly locations, see Specifying an Assembly's Location. If assemblyName is found, it is loaded in the default context.
Starting with the .NET Framework 2.0 Service Pack 1, this method can be used to create nonpublic types if the caller has been granted ReflectionPermission with the ReflectionPermissionFlag.RestrictedMemberAccess flag and if the grant set of the assembly that contains the nonpublic types is restricted to the caller’s grant set or to a subset thereof. (See Security Considerations for Reflection.)
To use this functionality, your application should target the .NET Framework 3.5 or later.
The following example defines a class named Person in an assembly named PersonInfo. Note that the Person class has two constructors, one of which is parameterless.
Public Class Person Private _name As String Public Sub New() End Sub Public Sub New(name As String) Me._name = name End Sub Public Property Name As String Get Return Me._name End Get Set Me._name = value End Set End Property Public Overrides Function ToString() As String Return Me._name End Function End Class
The following example calls the method to instantiate the Person class. It requires a reference to PersonInfo.dll to be added to the project. Because the method calls the Person class default constructor, the example assigns a value to its Name property.
Imports System.Runtime.Remoting Module Example Public Sub Main() Dim handle As ObjectHandle = Activator.CreateInstance("PersonInfo", "Person") Dim p As Person = CType(handle.Unwrap(), Person) p.Name = "Samuel" Console.WriteLine(p) End Sub End Module ' The example displays the following output: ' Samuel
However, CreateInstance is frequently called to instantiate a type that crosses machine boundaries or that is not known at design time. In this case, you cannot include a reference to the assembly in the project and cannot make early-bound calls to the type's members. To work around this limitation, the following example uses the CreateInstance method along with reflection to assign a value to the Person object's Name property and to display its value.
Imports System.Reflection Imports System.Runtime.Remoting Module Example Public Sub Main() Dim handle As ObjectHandle = Activator.CreateInstance("PersonInfo", "Person") Dim p As Object = handle.Unwrap() Dim t As Type = p.GetType() Dim prop As PropertyInfo = t.GetProperty("Name") if Not prop Is Nothing Then prop.SetValue(p, "Samuel") End If Dim method As MethodInfo = t.GetMethod("ToString") Dim retVal As Object = method.Invoke(p, Nothing) If Not retVal Is Nothing Then Console.WriteLine(retVal) End If End Sub End Module ' The example displays the following output: ' Samuel
for the ability to call unmanaged code when creating an instance of a delegate. Associated enumeration: SecurityPermissionFlag.UnmanagedCode
for accessing a nonpublic type when the grant set of the nonpublic type is restricted to the caller's grant set or to a subset thereof. Associated enumeration: ReflectionPermissionFlag.RestrictedMemberAccess
for accessing nonpublic types regardless of their grant set. Associated enumeration: ReflectionPermissionFlag.MemberAccess
Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.