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)
Parameters
- assemblyName
-
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 null, the executing assembly is searched.
- typeName
-
Type:
System::String^
The fully qualified name of the preferred type.
Return Value
Type: System.Runtime.Remoting::ObjectHandle^A handle that must be unwrapped to access the newly created instance.
| Exception | Condition |
|---|---|
| ArgumentNullException | typeName is null. |
| MissingMethodException | No matching public constructor was found. |
| TypeLoadException | typename was not found in assemblyName. |
| FileNotFoundException | assemblyName was not found. |
| MethodAccessException | The caller does not have permission to call this constructor. |
| MemberAccessException | You cannot create an instance of an abstract class, or this member was invoked with a late-binding mechanism. |
| TargetInvocationException | The constructor, which was invoked through reflection, threw an exception. |
| InvalidComObjectException | The COM type was not obtained through GetTypeFromProgID or GetTypeFromCLSID. |
| NotSupportedException | Creation of TypedReference, ArgIterator, Void, and RuntimeArgumentHandle types, or arrays of those types, is not supported. |
| BadImageFormatException | assemblyName is not a valid assembly. -or- 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. |
| FileLoadException | An assembly or module was loaded twice with two different evidences. -or- 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=1.0.0.0, 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.
Note |
|---|
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.
The following example calls the CreateInstance(String^, String^) method to instantiate the Person class. It requires a reference to PersonInfo.dll to be added to the project. Because the CreateInstance(String^, String^) method calls the Person class default constructor, the example assigns a value to its Name property.
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
Available since 1.1

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.