Activator.CreateInstance 方法

定义

使用与指定参数最匹配的构造函数创建指定类型的实例。

重载

CreateInstance(AppDomain, String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[], Evidence)
已过时.

使用命名程序集和与指定参数最匹配的构造函数创建在指定远程域中指定名称的类型实例。

CreateInstance(AppDomain, String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[])

使用命名程序集和与指定参数最匹配的构造函数创建在指定远程域中指定名称的类型实例。

CreateInstance(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[])

使用命名程序集和与指定参数最匹配的构造函数创建指定名称的类型实例。

CreateInstance(Type, BindingFlags, Binder, Object[], CultureInfo, Object[])

使用与指定参数最匹配的构造函数创建指定类型的实例。

CreateInstance(Type, BindingFlags, Binder, Object[], CultureInfo)

使用与指定参数最匹配的构造函数创建指定类型的实例。

CreateInstance(Type, Object[], Object[])

使用与指定参数最匹配的构造函数创建指定类型的实例。

CreateInstance(String, String, Object[])

使用命名程序集和无参数构造函数创建指定名称的类型实例。

CreateInstance(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[], Evidence)
已过时.

使用命名程序集和与指定参数最匹配的构造函数创建指定名称的类型实例。

CreateInstance(Type, Object[])

使用与指定参数最匹配的构造函数创建指定类型的实例。

CreateInstance(Type, Boolean)

使用该类型的无参数构造函数创建指定类型的实例。

CreateInstance(String, String)

使用命名程序集和无参数构造函数创建指定名称的类型实例。

CreateInstance(ActivationContext, String[])

创建由指定 ActivationContext 对象指定的类型的实例,并使用指定的自定义激活数据激活。

CreateInstance(Type)

使用该类型的无参数构造函数创建指定类型的实例。

CreateInstance(ActivationContext)

创建由指定 ActivationContext 对象指定的类型的实例。

CreateInstance(AppDomain, String, String)

使用命名程序集和无参数构造函数创建在指定远程域中指定名称的类型实例。

CreateInstance<T>()

使用无参数构造函数创建由指定泛型类型参数指定的类型的实例。

CreateInstance(AppDomain, String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[], Evidence)

注意

Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstance which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.

使用命名程序集和与指定参数最匹配的构造函数创建在指定远程域中指定名称的类型实例。

C#
public static System.Runtime.Remoting.ObjectHandle CreateInstance (AppDomain domain, string assemblyName, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes, System.Security.Policy.Evidence securityAttributes);
C#
[System.Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstance which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
[System.Security.SecurityCritical]
public static System.Runtime.Remoting.ObjectHandle CreateInstance (AppDomain domain, string assemblyName, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes, System.Security.Policy.Evidence securityAttributes);

参数

domain
AppDomain

在其中创建名为 typeName 类型的域。

assemblyName
String

要在其中寻找名为 typeName 类型的程序集的名称。 如果 assemblyNamenull,则会搜索正在执行的程序集。

typeName
String

要创建其实例的类型的完全限定名称。

ignoreCase
Boolean

true 指定搜索 typeName 不区分大小写;false 指定搜索区分大小写。

bindingAttr
BindingFlags

影响搜索 typeName 构造函数的零个或多个位标志的组合。 如果 bindingAttr 为零,则会对公共构造函数执行区分大小写的搜索。

binder
Binder

使用 bindingAttrargs 查找和标识 typeName 构造函数的对象。 如果 bindernull,则使用默认绑定器。

args
Object[]

一个参数数组,这些参数以数字、顺序和键入要调用的构造函数的参数。 如果 args 为空数组或 null,则调用不带参数的构造函数(无参数构造函数)。

culture
CultureInfo

控制 args 强制 typeName 构造函数声明的正式类型的区域性特定信息。 如果 culturenull,则使用当前线程的 CultureInfo

activationAttributes
Object[]

可以参与激活的一个或多个属性的数组。 这通常是包含单个 UrlAttribute 对象的数组。 UrlAttribute 指定激活远程对象所需的 URL。

securityAttributes
Evidence

用于做出安全策略决策并授予代码权限的信息。

返回

必须解包的句柄才能访问新创建的对象,或者 Nullable<T> 实例 null,且没有值。

属性

例外

domaintypeNamenull

找不到匹配的构造函数。

assemblyName中找不到 typeName

找不到 assemblyName

调用方无权调用此构造函数。

无法创建抽象类的实例,或者此成员是使用后期绑定机制调用的。

通过反射调用的构造函数引发异常。

COM 类型不是通过 GetTypeFromProgIDGetTypeFromCLSID获取的。

不支持创建 TypedReferenceArgIteratorVoidRuntimeArgumentHandle 类型或这些类型的数组。

-或-

activationAttributes 不是空数组,所创建的类型不派生自 MarshalByRefObject

-或-

args 最匹配的构造函数具有 varargs 参数。

assemblyName 不是有效的程序集。

-或-

公共语言运行时 (CLR) 版本 2.0 或更高版本当前已加载,并且已针对低于当前加载版本的 CLR 编译 assemblyName。 请注意,.NET Framework 版本 2.0、3.0 和 3.5 均使用 CLR 版本 2.0。

程序集或模块加载了两次,其中包含两个不同的证据。

-或-

程序集名称或基本代码无效。

注解

当主机需要在具有受限安全权限的应用程序域中执行代码时,请使用 CreateInstance

使用 ObjectHandle.Unwrap 解包返回值。

适用于

.NET Framework 4.8.1 和其他版本
产品 版本 (已过时)
.NET Framework 2.0, 3.0, 3.5 (4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1)

CreateInstance(AppDomain, String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[])

使用命名程序集和与指定参数最匹配的构造函数创建在指定远程域中指定名称的类型实例。

C#
[System.Security.SecurityCritical]
public static System.Runtime.Remoting.ObjectHandle CreateInstance (AppDomain domain, string assemblyName, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes);

参数

domain
AppDomain

在其中创建名为 typeName 类型的域。

assemblyName
String

要在其中寻找名为 typeName 类型的程序集的名称。 如果 assemblyNamenull,则会搜索正在执行的程序集。

typeName
String

要创建其实例的类型的完全限定名称。

ignoreCase
Boolean

true 指定搜索 typeName 不区分大小写;false 指定搜索区分大小写。

bindingAttr
BindingFlags

影响搜索 typeName 构造函数的零个或多个位标志的组合。 如果 bindingAttr 为零,则会对公共构造函数执行区分大小写的搜索。

binder
Binder

使用 bindingAttrargs 查找和标识 typeName 构造函数的对象。 如果 bindernull,则使用默认绑定器。

args
Object[]

一个参数数组,这些参数以数字、顺序和键入要调用的构造函数的参数。 如果 args 为空数组或 null,则调用不带参数的构造函数(无参数构造函数)。

culture
CultureInfo

控制 args 强制 typeName 构造函数声明的正式类型的区域性特定信息。 如果 culturenull,则使用当前线程的 CultureInfo

activationAttributes
Object[]

可以参与激活的一个或多个属性的数组。 这通常是一个数组,其中包含一个 UrlAttribute 对象,该对象指定激活远程对象所需的 URL。

此参数与客户端激活的对象相关。 客户端激活是保留的旧技术,用于向后兼容,但不建议用于新开发。 分布式应用程序应改用 Windows Communication Foundation。

返回

必须解包的句柄才能访问新创建的对象,或者 Nullable<T> 实例 null,且没有值。

属性

例外

domaintypeNamenull

找不到匹配的构造函数。

assemblyName中找不到 typeName

找不到 assemblyName

调用方无权调用此构造函数。

无法创建抽象类的实例,或者此成员是使用后期绑定机制调用的。

通过反射调用的构造函数引发异常。

COM 类型不是通过 GetTypeFromProgIDGetTypeFromCLSID获取的。

不支持创建 TypedReferenceArgIteratorVoidRuntimeArgumentHandle 类型或这些类型的数组。

-或-

activationAttributes 不是空数组,所创建的类型不派生自 MarshalByRefObject

-或-

args 最匹配的构造函数具有 varargs 参数。

assemblyName 不是有效的程序集。

-或-

公共语言运行时 (CLR) 版本 2.0 或更高版本当前已加载,并且已针对低于当前加载版本的 CLR 编译 assemblyName。 请注意,.NET Framework 版本 2.0、3.0 和 3.5 均使用 CLR 版本 2.0。

程序集或模块加载了两次,其中包含两个不同的证据。

-或-

程序集名称或基本代码无效。

注解

当主机需要在具有受限安全权限的应用程序域中执行代码时,请使用 CreateInstance

使用 ObjectHandle.Unwrap 解包返回值。

适用于

.NET Framework 4.8.1 和其他版本
产品 版本
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

CreateInstance(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[])

Source:
Activator.RuntimeType.cs
Source:
Activator.RuntimeType.cs
Source:
Activator.RuntimeType.cs

使用命名程序集和与指定参数最匹配的构造函数创建指定名称的类型实例。

C#
public static System.Runtime.Remoting.ObjectHandle? CreateInstance (string assemblyName, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, object?[]? args, System.Globalization.CultureInfo? culture, object?[]? activationAttributes);
C#
public static System.Runtime.Remoting.ObjectHandle CreateInstance (string assemblyName, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes);

参数

assemblyName
String

要在其中寻找名为 typeName 类型的程序集的名称。 如果 assemblyNamenull,则会搜索正在执行的程序集。

typeName
String

要创建其实例的类型的完全限定名称。

ignoreCase
Boolean

true 指定搜索 typeName 不区分大小写;false 指定搜索区分大小写。

bindingAttr
BindingFlags

影响搜索 typeName 构造函数的零个或多个位标志的组合。 如果 bindingAttr 为零,则会对公共构造函数执行区分大小写的搜索。

binder
Binder

使用 bindingAttrargs 查找和标识 typeName 构造函数的对象。 如果 bindernull,则使用默认绑定器。

args
Object[]

一个参数数组,这些参数以数字、顺序和键入要调用的构造函数的参数。 如果 args 为空数组或 null,则调用不带参数的构造函数(无参数构造函数)。

culture
CultureInfo

控制 args 强制 typeName 构造函数声明的正式类型的区域性特定信息。 如果 culturenull,则使用当前线程的 CultureInfo

activationAttributes
Object[]

可以参与激活的一个或多个属性的数组。 这通常是一个数组,其中包含一个 UrlAttribute 对象,该对象指定激活远程对象所需的 URL。

此参数与客户端激活的对象相关。 客户端激活是保留的旧技术,用于向后兼容,但不建议用于新开发。 分布式应用程序应改用 Windows Communication Foundation。

返回

必须解包的句柄才能访问新创建的实例,或 null 没有值的 Nullable<T> 实例。

例外

typeName null

找不到匹配的构造函数。

assemblyName中找不到 typeName

找不到 assemblyName

调用方无权调用此构造函数。

无法创建抽象类的实例,或者此成员是使用后期绑定机制调用的。

通过反射调用的构造函数引发异常。

COM 类型不是通过 GetTypeFromProgIDGetTypeFromCLSID获取的。

不支持创建 TypedReferenceArgIteratorVoidRuntimeArgumentHandle 类型或这些类型的数组。

-或-

activationAttributes 不是空数组,所创建的类型不派生自 MarshalByRefObject

-或-

args 最匹配的构造函数具有 varargs 参数。

assemblyName 不是有效的程序集。

-或-

公共语言运行时 (CLR) 版本 2.0 或更高版本当前已加载,并且已针对低于当前加载版本的 CLR 编译 assemblyName。 请注意,.NET Framework 版本 2.0、3.0 和 3.5 均使用 CLR 版本 2.0。

程序集或模块加载了两次,其中包含两个不同的证据。

-或-

程序集名称或基本代码无效。

注解

使用 ObjectHandle.Unwrap 解包返回值。

备注

从 .NET Framework 2.0 开始,如果使用 ReflectionPermissionFlag.RestrictedMemberAccess 标志向调用方授予 ReflectionPermission,并且包含非公共类型和成员的程序集的授予集仅限于调用方授予集或子集,则此方法可用于创建非公共类型和成员。 (请参阅反射安全注意事项。若要使用此功能,应用程序应面向 .NET Framework 3.5 或更高版本。

适用于

.NET 9 和其他版本
产品 版本
.NET Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

CreateInstance(Type, BindingFlags, Binder, Object[], CultureInfo, Object[])

Source:
Activator.RuntimeType.cs
Source:
Activator.RuntimeType.cs
Source:
Activator.RuntimeType.cs

使用与指定参数最匹配的构造函数创建指定类型的实例。

C#
public static object? CreateInstance (Type type, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, object?[]? args, System.Globalization.CultureInfo? culture, object?[]? activationAttributes);
C#
public static object CreateInstance (Type type, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes);

参数

type
Type

要创建的对象的类型。

bindingAttr
BindingFlags

影响搜索 type 构造函数的零个或多个位标志的组合。 如果 bindingAttr 为零,则会对公共构造函数执行区分大小写的搜索。

binder
Binder

使用 bindingAttrargs 查找和标识 type 构造函数的对象。 如果 bindernull,则使用默认绑定器。

args
Object[]

一个参数数组,这些参数以数字、顺序和键入要调用的构造函数的参数。 如果 args 为空数组或 null,则调用不带参数的构造函数(无参数构造函数)。

culture
CultureInfo

控制 args 强制 type 构造函数声明的正式类型的区域性特定信息。 如果 culturenull,则使用当前线程的 CultureInfo

activationAttributes
Object[]

可以参与激活的一个或多个属性的数组。 这通常是一个数组,其中包含一个 UrlAttribute 对象,该对象指定激活远程对象所需的 URL。

此参数与客户端激活的对象相关。 客户端激活是保留的旧技术,用于向后兼容,但不建议用于新开发。 分布式应用程序应改用 Windows Communication Foundation。

返回

对新创建的对象的引用,或 Nullable<T> 实例没有值的 null

例外

type null

type 不是 RuntimeType

-或-

type 是一种打开的泛型类型(即 ContainsGenericParameters 属性返回 true)。

type 不能是 TypeBuilder

-或-

不支持创建 TypedReferenceArgIteratorVoidRuntimeArgumentHandle 类型或这些类型的数组。

-或-

activationAttributes 不是空数组,所创建的类型不派生自 MarshalByRefObject

-或-

包含 type 的程序集是使用 Save创建的动态程序集。

-或-

args 最匹配的构造函数具有 varargs 参数。

被调用的构造函数将引发异常。

调用方无权调用此构造函数。

无法创建抽象类的实例,或者此成员是使用后期绑定机制调用的。

COM 类型不是通过 GetTypeFromProgIDGetTypeFromCLSID获取的。

找不到匹配的构造函数。

type 是 COM 对象,但用于获取类型的类标识符无效,或者未注册已标识的类。

type 不是有效的类型。

注解

要调用的构造函数必须在指定的绑定器和绑定属性的约束下提供与指定参数列表最具体的匹配项。

备注

从 .NET Framework 2.0 开始,此方法可用于访问非公共类型和成员(如果调用方已获得 ReflectionPermissionFlag.RestrictedMemberAccess 标志 ReflectionPermission,以及非公共类型和成员的授予集限制为调用方授予集或子集)。 (请参阅反射安全注意事项。若要使用此功能,应用程序应面向 .NET Framework 3.5 或更高版本。

适用于

.NET 9 和其他版本
产品 版本
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

CreateInstance(Type, BindingFlags, Binder, Object[], CultureInfo)

Source:
Activator.cs
Source:
Activator.cs
Source:
Activator.cs

使用与指定参数最匹配的构造函数创建指定类型的实例。

C#
public static object? CreateInstance (Type type, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, object?[]? args, System.Globalization.CultureInfo? culture);
C#
public static object CreateInstance (Type type, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture);

参数

type
Type

要创建的对象的类型。

bindingAttr
BindingFlags

影响搜索 type 构造函数的零个或多个位标志的组合。 如果 bindingAttr 为零,则会对公共构造函数执行区分大小写的搜索。

binder
Binder

使用 bindingAttrargs 查找和标识 type 构造函数的对象。 如果 bindernull,则使用默认绑定器。

args
Object[]

一个参数数组,这些参数以数字、顺序和键入要调用的构造函数的参数。 如果 args 为空数组或 null,则调用不带参数的构造函数(无参数构造函数)。

culture
CultureInfo

控制 args 强制 type 构造函数声明的正式类型的区域性特定信息。 如果 culturenull,则使用当前线程的 CultureInfo

返回

对新创建的对象的引用,或 Nullable<T> 实例没有值的 null

例外

type null

type 不是 RuntimeType

-或-

type 是一种打开的泛型类型(即 ContainsGenericParameters 属性返回 true)。

type 不能是 TypeBuilder

-或-

不支持创建 TypedReferenceArgIteratorVoidRuntimeArgumentHandle 类型或这些类型的数组。

-或-

包含 type 的程序集是使用 Save创建的动态程序集。

-或-

args 最匹配的构造函数具有 varargs 参数。

被调用的构造函数将引发异常。

调用方无权调用此构造函数。

无法创建抽象类的实例,或者此成员是使用后期绑定机制调用的。

COM 类型不是通过 GetTypeFromProgIDGetTypeFromCLSID获取的。

找不到匹配的构造函数。

type 是 COM 对象,但用于获取类型的类标识符无效,或者未注册已标识的类。

type 不是有效的类型。

注解

要调用的构造函数必须在指定的绑定器和绑定属性的约束下提供与指定参数列表最具体的匹配项。

备注

从 .NET Framework 2.0 开始,如果使用 ReflectionPermissionFlag.RestrictedMemberAccess 标志向调用方授予 ReflectionPermission,并且包含非公共类型和成员的程序集的授予集仅限于调用方授予集或子集,则此方法可用于访问非公共类型和成员。 (请参阅反射安全注意事项。若要使用此功能,应用程序应面向 .NET Framework 3.5 或更高版本。

适用于

.NET 9 和其他版本
产品 版本
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

CreateInstance(Type, Object[], Object[])

Source:
Activator.cs
Source:
Activator.cs
Source:
Activator.cs

使用与指定参数最匹配的构造函数创建指定类型的实例。

C#
public static object? CreateInstance (Type type, object?[]? args, object?[]? activationAttributes);
C#
public static object CreateInstance (Type type, object[] args, object[] activationAttributes);

参数

type
Type

要创建的对象的类型。

args
Object[]

一个参数数组,这些参数以数字、顺序和键入要调用的构造函数的参数。 如果 args 为空数组或 null,则调用不带参数的构造函数(无参数构造函数)。

activationAttributes
Object[]

可以参与激活的一个或多个属性的数组。 这通常是一个数组,其中包含一个 UrlAttribute 对象,该对象指定激活远程对象所需的 URL。

此参数与客户端激活的对象相关。 客户端激活是保留的旧技术,用于向后兼容,但不建议用于新开发。 分布式应用程序应改用 Windows Communication Foundation。

返回

对新创建的对象的引用,或 Nullable<T> 实例没有值的 null

例外

type null

type 不是 RuntimeType

-或-

type 是一种打开的泛型类型(即 ContainsGenericParameters 属性返回 true)。

type 不能是 TypeBuilder

-或-

不支持创建 TypedReferenceArgIteratorVoidRuntimeArgumentHandle 类型或这些类型的数组。

-或-

activationAttributes 不是空数组,所创建的类型不派生自 MarshalByRefObject

-或-

包含 type 的程序集是使用 Save创建的动态程序集。

-或-

args 最匹配的构造函数具有 varargs 参数。

被调用的构造函数将引发异常。

调用方无权调用此构造函数。

无法创建抽象类的实例,或者此成员是使用后期绑定机制调用的。

COM 类型不是通过 GetTypeFromProgIDGetTypeFromCLSID获取的。

找不到匹配的公共构造函数。

type 是 COM 对象,但用于获取类型的类标识符无效,或者未注册已标识的类。

type 不是有效的类型。

注解

要调用的构造函数必须可访问,并且必须提供与指定参数列表最具体的匹配项。

备注

从 .NET Framework 2.0 开始,如果调用方已获得 ReflectionPermissionFlag.RestrictedMemberAccess 标志 ReflectionPermission,并且包含非公共类型的程序集的授予集仅限于调用方授予集或子集,则此方法可用于访问非公共类型。 (请参阅反射安全注意事项。若要使用此功能,应用程序应面向 .NET Framework 3.5 或更高版本。

适用于

.NET 9 和其他版本
产品 版本
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

CreateInstance(String, String, Object[])

Source:
Activator.RuntimeType.cs
Source:
Activator.RuntimeType.cs
Source:
Activator.RuntimeType.cs

使用命名程序集和无参数构造函数创建指定名称的类型实例。

C#
public static System.Runtime.Remoting.ObjectHandle? CreateInstance (string assemblyName, string typeName, object?[]? activationAttributes);
C#
public static System.Runtime.Remoting.ObjectHandle CreateInstance (string assemblyName, string typeName, object[] activationAttributes);

参数

assemblyName
String

要在其中寻找名为 typeName 类型的程序集的名称。 如果 assemblyNamenull,则会搜索正在执行的程序集。

typeName
String

要创建其实例的类型的完全限定名称。

activationAttributes
Object[]

可以参与激活的一个或多个属性的数组。 这通常是一个数组,其中包含一个 UrlAttribute 对象,该对象指定激活远程对象所需的 URL。

此参数与客户端激活的对象相关。 客户端激活是保留的旧技术,用于向后兼容,但不建议用于新开发。 分布式应用程序应改用 Windows Communication Foundation。

返回

必须取消包装才能访问新创建的对象或 Nullable<T> 实例 null 的句柄。

例外

typeName null

找不到匹配的公共构造函数。

assemblyName中找不到 typeName

找不到 assemblyName

调用方无权调用此构造函数。

无法创建抽象类的实例,或者此成员是使用后期绑定机制调用的。

COM 类型不是通过 GetTypeFromProgIDGetTypeFromCLSID获取的。

不支持创建 TypedReferenceArgIteratorVoidRuntimeArgumentHandle 类型或这些类型的数组。

-或-

activationAttributes 不是空数组,所创建的类型不派生自 MarshalByRefObject

-或-

activationAttributes 不是 UrlAttribute

数组。

assemblyName 不是有效的程序集。

-或-

公共语言运行时 (CLR) 版本 2.0 或更高版本当前已加载,并且已针对低于当前加载版本的 CLR 编译 assemblyName。 请注意,.NET Framework 版本 2.0、3.0 和 3.5 均使用 CLR 版本 2.0。

程序集或模块加载了两次,其中包含两个不同的证据。

-或-

程序集名称或基本代码无效。

调用的构造函数引发异常。

-或-

尝试在 activationAttributes中指定的目标中远程激活时出错。

注解

使用 ObjectHandle.Unwrap 解包返回值。

备注

从 .NET Framework 2.0 开始,如果使用 ReflectionPermissionFlag.RestrictedMemberAccess 标志授予调用方 ReflectionPermission 并且非公共类型的授予集仅限于调用方授予集或子集,则此方法可用于创建非公共类型。 (请参阅反射安全注意事项。若要使用此功能,应用程序应面向 .NET Framework 3.5 或更高版本。

适用于

.NET 9 和其他版本
产品 版本
.NET Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

CreateInstance(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[], Evidence)

注意

Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstance which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.

使用命名程序集和与指定参数最匹配的构造函数创建指定名称的类型实例。

C#
public static System.Runtime.Remoting.ObjectHandle CreateInstance (string assemblyName, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes, System.Security.Policy.Evidence securityInfo);
C#
[System.Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstance which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public static System.Runtime.Remoting.ObjectHandle CreateInstance (string assemblyName, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes, System.Security.Policy.Evidence securityInfo);

参数

assemblyName
String

要在其中寻找名为 typeName 类型的程序集的名称。 如果 assemblyNamenull,则会搜索正在执行的程序集。

typeName
String

要创建其实例的类型的完全限定名称。

ignoreCase
Boolean

true 指定搜索 typeName 不区分大小写;false 指定搜索区分大小写。

bindingAttr
BindingFlags

影响搜索 typeName 构造函数的零个或多个位标志的组合。 如果 bindingAttr 为零,则会对公共构造函数执行区分大小写的搜索。

binder
Binder

使用 bindingAttrargs 查找和标识 typeName 构造函数的对象。 如果 bindernull,则使用默认绑定器。

args
Object[]

一个参数数组,这些参数以数字、顺序和键入要调用的构造函数的参数。 如果 args 为空数组或 null,则调用不带参数的构造函数(无参数构造函数)。

culture
CultureInfo

控制 args 强制 typeName 构造函数声明的正式类型的区域性特定信息。 如果 culturenull,则使用当前线程的 CultureInfo

activationAttributes
Object[]

可以参与激活的一个或多个属性的数组。 这通常是一个数组,其中包含一个 UrlAttribute 对象,该对象指定激活远程对象所需的 URL。

此参数与客户端激活的对象相关。 客户端激活是保留的旧技术,用于向后兼容,但不建议用于新开发。 分布式应用程序应改用 Windows Communication Foundation。

securityInfo
Evidence

用于做出安全策略决策并授予代码权限的信息。

返回

必须解包的句柄才能访问新创建的对象,或者 Nullable<T> 实例 null,且没有值。

属性

例外

typeName null

找不到匹配的构造函数。

assemblyName中找不到 typeName

找不到 assemblyName

调用方无权调用此构造函数。

无法创建抽象类的实例,或者此成员是使用后期绑定机制调用的。

通过反射调用的构造函数引发异常。

COM 类型不是通过 GetTypeFromProgIDGetTypeFromCLSID获取的。

不支持创建 TypedReferenceArgIteratorVoidRuntimeArgumentHandle 类型或这些类型的数组。

-或-

activationAttributes 不是空数组,所创建的类型不派生自 MarshalByRefObject

-或-

args 最匹配的构造函数具有 varargs 参数。

assemblyName 不是有效的程序集。

-或-

公共语言运行时 (CLR) 版本 2.0 或更高版本当前已加载,并且已针对低于当前加载版本的 CLR 编译 assemblyName。 请注意,.NET Framework 版本 2.0、3.0 和 3.5 均使用 CLR 版本 2.0。

程序集或模块加载了两次,其中包含两个不同的证据。

-或-

程序集名称或基本代码无效。

注解

使用 ObjectHandle.Unwrap 解包返回值。

备注

从 .NET Framework 2.0 开始,如果使用 ReflectionPermissionFlag.RestrictedMemberAccess 标志向调用方授予 ReflectionPermission,并且包含非公共类型和成员的程序集的授予集仅限于调用方授予集或子集,则此方法可用于创建非公共类型和成员。 (请参阅反射安全注意事项。若要使用此功能,应用程序应面向 .NET Framework 3.5 或更高版本。

适用于

.NET Framework 4.8.1 和其他版本
产品 版本 (已过时)
.NET Framework 1.1, 2.0, 3.0, 3.5 (4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1)

CreateInstance(Type, Object[])

Source:
Activator.cs
Source:
Activator.cs
Source:
Activator.cs

使用与指定参数最匹配的构造函数创建指定类型的实例。

C#
public static object CreateInstance (Type type, params object[] args);
C#
public static object? CreateInstance (Type type, params object?[]? args);
C#
public static object CreateInstance (Type type, object[] args);

参数

type
Type

要创建的对象的类型。

args
Object[]

一个参数数组,这些参数以数字、顺序和键入要调用的构造函数的参数。 如果 args 为空数组或 null,则调用不带参数的构造函数(无参数构造函数)。

返回

对新创建的对象的引用,或 Nullable<T> 实例没有值的 null

例外

type null

type 不是 RuntimeType

-或-

type 是一种打开的泛型类型(即 ContainsGenericParameters 属性返回 true)。

type 不能是 TypeBuilder

-或-

不支持创建 TypedReferenceArgIteratorVoidRuntimeArgumentHandle 类型或这些类型的数组。

-或-

包含 type 的程序集是使用 Save创建的动态程序集。

-或-

args 最匹配的构造函数具有 varargs 参数。

被调用的构造函数将引发异常。

调用方无权调用此构造函数。

注意:在适用于 Windows 应用商店应用的 .NET 中,可移植类库,请改为捕获基类异常,MemberAccessException

无法创建抽象类的实例,或者此成员是使用后期绑定机制调用的。

COM 类型不是通过 GetTypeFromProgIDGetTypeFromCLSID获取的。

找不到匹配的公共构造函数。

注意:在适用于 Windows 应用商店应用的 .NET 中,可移植类库,请改为捕获基类异常,MissingMemberException

type 是 COM 对象,但用于获取类型的类标识符无效,或者未注册已标识的类。

type 不是有效的类型。

示例

以下示例调用 CreateInstance(Type, Object[]) 方法来创建 String 对象。 它调用 String.String(Char[], Int32, Int32) 构造函数来实例化一个字符串,该字符串包含从第十四个位置开始的字符数组中的十个元素。

C#
using System;

public class Example
{
   public static void Main()
   {
      // Initialize array of characters from a to z.
      char[] chars = new char[26];
      for (int ctr = 0; ctr < 26; ctr++)
         chars[ctr] = (char) (ctr + 0x0061);

      object obj = Activator.CreateInstance(typeof(string),
                                            new object[] { chars, 13, 10 } );
      Console.WriteLine(obj);
   }
}
// The example displays the following output:
//       nopqrstuvw

以下示例创建一个交错数组,其元素是要传递给 String 构造函数的参数。 然后,该示例将每个数组传递给 CreateInstance(Type, Object[]) 方法以调用相应的字符串构造函数。

C#
using System;

public class Example
{
   public static void Main()
   {
      char[] characters = { 'a', 'b', 'c', 'd', 'e', 'f' };
      object[][] arguments = new object[3][] { new object[] { characters },
                                               new object[] { characters, 1, 4 },
                                               new object[] { characters[1], 20 } };

      for (int ctr = 0; ctr <= arguments.GetUpperBound(0); ctr++) {
         object[] args = arguments[ctr];
         object result = Activator.CreateInstance(typeof(string), args);
         Console.WriteLine("{0}: {1}", result.GetType().Name, result);
      }
   }
}
// The example displays the following output:
//    String: abcdef
//    String: bcde
//    String: bbbbbbbbbbbbbbbbbbbb

注解

要调用的构造函数必须可访问,并且必须提供与指定参数列表最具体的匹配项。

备注

从 .NET Framework 2.0 开始,如果调用方已获得 ReflectionPermissionFlag.RestrictedMemberAccess 标志 ReflectionPermission,并且包含非公共类型的程序集的授予集仅限于调用方授予集或子集,则此方法可用于访问非公共类型。 (请参阅反射安全注意事项。若要使用此功能,应用程序应面向 .NET Framework 3.5 或更高版本。

适用于

.NET 9 和其他版本
产品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

CreateInstance(Type, Boolean)

Source:
Activator.RuntimeType.cs
Source:
Activator.RuntimeType.cs
Source:
Activator.RuntimeType.cs

使用该类型的无参数构造函数创建指定类型的实例。

C#
public static object? CreateInstance (Type type, bool nonPublic);
C#
public static object CreateInstance (Type type, bool nonPublic);

参数

type
Type

要创建的对象的类型。

nonPublic
Boolean

如果公共或非公共无参数构造函数可以匹配,则 true;如果只有公共无参数构造函数可以匹配,则 false

返回

对新创建的对象或 Nullable<T> 实例 null 的引用。

例外

type null

type 不是 RuntimeType

-或-

type 是一种打开的泛型类型(即 ContainsGenericParameters 属性返回 true)。

type 不能是 TypeBuilder

-或-

不支持创建 TypedReferenceArgIteratorVoidRuntimeArgumentHandle 类型或这些类型的数组。

-或-

包含 type 的程序集是使用 Save创建的动态程序集。

被调用的构造函数将引发异常。

调用方无权调用此构造函数。

无法创建抽象类的实例,或者此成员是使用后期绑定机制调用的。

COM 类型不是通过 GetTypeFromProgIDGetTypeFromCLSID获取的。

找不到匹配的公共构造函数。

type 是 COM 对象,但用于获取类型的类标识符无效,或者未注册已标识的类。

type 不是有效的类型。

注解

备注

从 .NET Framework 2.0 开始,如果使用 ReflectionPermissionFlag.RestrictedMemberAccess 标志向调用方授予 ReflectionPermission,并且包含非公共类型和成员的程序集的授予集仅限于调用方授予集或子集,则此方法可用于访问非公共类型和成员。 (请参阅反射安全注意事项。若要使用此功能,应用程序应面向 .NET Framework 3.5 或更高版本。

适用于

.NET 9 和其他版本
产品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.5, 1.6, 2.0, 2.1

CreateInstance(String, String)

Source:
Activator.RuntimeType.cs
Source:
Activator.RuntimeType.cs
Source:
Activator.RuntimeType.cs

使用命名程序集和无参数构造函数创建指定名称的类型实例。

C#
public static System.Runtime.Remoting.ObjectHandle? CreateInstance (string assemblyName, string typeName);
C#
public static System.Runtime.Remoting.ObjectHandle CreateInstance (string assemblyName, string typeName);

参数

assemblyName
String

要在其中寻找名为 typeName 类型的程序集的名称。 如果 assemblyNamenull,则会搜索正在执行的程序集。

typeName
String

要创建其实例的类型的完全限定名称。

返回

必须取消包装才能访问新创建的对象或 Nullable<T> 实例 null 的句柄。

例外

typeName null

找不到匹配的公共构造函数。

assemblyName中找不到 typeName

找不到 assemblyName

调用方无权调用此构造函数。

不能创建抽象类的实例,或者此成员是使用后期绑定机制调用的。

通过反射调用的构造函数引发异常。

COM 类型不是通过 GetTypeFromProgIDGetTypeFromCLSID获取的。

不支持创建 TypedReferenceArgIteratorVoidRuntimeArgumentHandle 类型或这些类型的数组。

assemblyName 不是有效的程序集。

-或-

公共语言运行时 (CLR) 版本 2.0 或更高版本当前已加载,并且已针对低于当前加载版本的 CLR 编译 assemblyName。 请注意,.NET Framework 版本 2.0、3.0 和 3.5 均使用 CLR 版本 2.0。

程序集或模块加载了两次,其中包含两个不同的证据。

-或-

程序集名称或基本代码无效。

示例

以下示例在名为 PersonInfo的程序集中定义名为 Person 的类。 请注意,Person 类有两个构造函数,其中一个是无参数的。

C#
using System;

public class Person
{
   private string _name;

   public Person()
   { }

   public Person(string name)
   {
      this._name = name;
   }

   public string Name
   { get { return this._name; }
     set { this._name = value; } }

   public override string ToString()
   {
      return this._name;
   }
}

以下示例调用 CreateInstance(String, String) 方法来实例化 Person 类。 它需要引用要添加到项目中 PersonInfo.dll。 由于 CreateInstance(String, String) 方法调用 Person 类无参数构造函数,因此该示例为其 Name 属性赋值。

C#
using System;
using System.Runtime.Remoting;

public class Example
{
   public static void Main()
   {
      ObjectHandle handle = Activator.CreateInstance("PersonInfo", "Person");
      Person p = (Person) handle.Unwrap();
      p.Name = "Samuel";
      Console.WriteLine(p);
   }
}
// The example displays the following output:
//        Samuel

但是,经常调用 CreateInstance 来实例化跨越计算机边界或设计时未知的类型。 在这种情况下,不能在项目中包括对程序集的引用,也不能对类型的成员进行早期绑定调用。 为了解决此限制,以下示例使用 CreateInstance 方法以及反射将值分配给 Person 对象的 Name 属性并显示其值。

C#
using System;
using System.Reflection;
using System.Runtime.Remoting;

public class Example
{
   public static void Main()
   {
      ObjectHandle handle = Activator.CreateInstance("PersonInfo", "Person");
      object p = handle.Unwrap();
      Type t = p.GetType();
      PropertyInfo prop = t.GetProperty("Name");
      if (prop != null)
         prop.SetValue(p, "Samuel");

      MethodInfo method = t.GetMethod("ToString");
      object retVal = method.Invoke(p, null);
      if (retVal != null)
         Console.WriteLine(retVal);
   }
}
// The example displays the following output:
//        Samuel

注解

使用 ObjectHandle.Unwrap 解包返回值。

assemblyName 可以是以下任一项:

  • 程序集的简单名称,不带其路径或文件扩展名。 例如,为路径和名称为的程序集指定 TypeExtensions。\bin\TypeExtensions.dll。

  • 已签名程序集的全名,由其简单名称、版本、区域性和公钥令牌组成;例如,“TypeExtensions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=181869f2f7435b51”。

有关公共语言运行时如何标识和加载程序集的详细信息,请参阅 运行时如何定位程序集。 有关使用应用程序配置文件定义程序集位置的信息,请参阅 指定程序集的位置。 如果找到 assemblyName,则会在默认上下文中加载它。

备注

从 .NET Framework 2.0 开始,如果使用 ReflectionPermissionFlag.RestrictedMemberAccess 标志向调用方授予 ReflectionPermission,并且包含非公共类型的程序集的授予集仅限于调用方授予集或子集,则此方法可用于创建非公共类型。 (请参阅反射安全注意事项。若要使用此功能,应用程序应面向 .NET Framework 3.5 或更高版本。

适用于

.NET 9 和其他版本
产品 版本
.NET Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

CreateInstance(ActivationContext, String[])

创建由指定 ActivationContext 对象指定的类型的实例,并使用指定的自定义激活数据激活。

C#
public static System.Runtime.Remoting.ObjectHandle CreateInstance (ActivationContext activationContext, string[] activationCustomData);

参数

activationContext
ActivationContext

一个激活上下文对象,指定要创建的对象。

activationCustomData
String[]

包含自定义激活数据的 Unicode 字符串数组。

返回

必须取消包装才能访问新创建的对象或 Nullable<T> 实例 null 的句柄。

注解

使用 ObjectHandle.Unwrap 方法解包返回值。

在基于清单的激活期间使用激活上下文来设置域策略并提供基于应用程序的安全模型。 ActivationContext 类包含一个 ApplicationIdentity 对象,该对象提供对应用程序清单的访问权限。 有关详细信息,请参阅 ApplicationSecurityManager 类。

另请参阅

适用于

.NET Framework 4.8.1 和其他版本
产品 版本
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

CreateInstance(Type)

Source:
Activator.cs
Source:
Activator.cs
Source:
Activator.cs

使用该类型的无参数构造函数创建指定类型的实例。

C#
public static object CreateInstance (Type type);
C#
public static object? CreateInstance (Type type);

参数

type
Type

要创建的对象的类型。

返回

对新创建的对象或 Nullable<T> 实例 null 的引用。

例外

type null

type 不是 RuntimeType

-或-

type 是一种打开的泛型类型(即 ContainsGenericParameters 属性返回 true)。

type 不能是 TypeBuilder

-或-

不支持创建 TypedReferenceArgIteratorVoidRuntimeArgumentHandle 类型或这些类型的数组。

-或-

包含 type 的程序集是使用 Save创建的动态程序集。

被调用的构造函数将引发异常。

调用方无权调用此构造函数。

注意:在适用于 Windows 应用商店应用的 .NET 中,可移植类库,请改为捕获基类异常,MemberAccessException

无法创建抽象类的实例,或者此成员是使用后期绑定机制调用的。

COM 类型不是通过 GetTypeFromProgIDGetTypeFromCLSID获取的。

找不到匹配的公共构造函数。

注意:在适用于 Windows 应用商店应用的 .NET 中,可移植类库,请改为捕获基类异常,MissingMemberException

type 是 COM 对象,但用于获取类型的类标识符无效,或者未注册已标识的类。

type 不是有效的类型。

示例

下面的代码示例演示如何调用 CreateInstance(Type) 方法。 创建多个不同类型的实例并显示其默认值。

C#
using System;

class DynamicInstanceList
{
    private static string instanceSpec = "System.EventArgs;System.Random;" +
        "System.Exception;System.Object;System.Version";

    public static void Main()
    {
        string[] instances = instanceSpec.Split(';');
        Array instlist = Array.CreateInstance(typeof(object), instances.Length);
        object item;
        for (int i = 0; i < instances.Length; i++)
        {
            // create the object from the specification string
            Console.WriteLine("Creating instance of: {0}", instances[i]);
            item = Activator.CreateInstance(Type.GetType(instances[i]));
            instlist.SetValue(item, i);
        }
        Console.WriteLine("\nObjects and their default values:\n");
        foreach (object o in instlist)
        {
            Console.WriteLine("Type:     {0}\nValue:    {1}\nHashCode: {2}\n",
                o.GetType().FullName, o.ToString(), o.GetHashCode());
        }
    }
}

// This program will display output similar to the following:
//
// Creating instance of: System.EventArgs
// Creating instance of: System.Random
// Creating instance of: System.Exception
// Creating instance of: System.Object
// Creating instance of: System.Version
//
// Objects and their default values:
//
// Type:     System.EventArgs
// Value:    System.EventArgs
// HashCode: 46104728
//
// Type:     System.Random
// Value:    System.Random
// HashCode: 12289376
//
// Type:     System.Exception
// Value:    System.Exception: Exception of type 'System.Exception' was thrown.
// HashCode: 55530882
//
// Type:     System.Object
// Value:    System.Object
// HashCode: 30015890
//
// Type:     System.Version
// Value:    0.0
// HashCode: 1048575

注解

必须可访问要调用的构造函数。

备注

从 .NET Framework 2.0 开始,如果调用方已获得 ReflectionPermissionFlag.RestrictedMemberAccess 标志 ReflectionPermission,并且包含非公共类型的程序集的授予集仅限于调用方授予集或子集,则此方法可用于访问非公共类型。 (请参阅反射安全注意事项。若要使用此功能,应用程序应面向 .NET Framework 3.5 或更高版本。

适用于

.NET 9 和其他版本
产品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

CreateInstance(ActivationContext)

创建由指定 ActivationContext 对象指定的类型的实例。

C#
public static System.Runtime.Remoting.ObjectHandle CreateInstance (ActivationContext activationContext);

参数

activationContext
ActivationContext

一个激活上下文对象,指定要创建的对象。

返回

必须取消包装才能访问新创建的对象或 Nullable<T> 实例 null 的句柄。

注解

使用 ObjectHandle.Unwrap 方法解包返回值。

在基于清单的激活期间使用激活上下文来设置域策略并提供基于应用程序的安全模型。 ActivationContext 类包含一个 ApplicationIdentity 对象,该对象提供对应用程序清单的访问权限。 有关详细信息,请参阅 ApplicationSecurityManager 类。

另请参阅

适用于

.NET Framework 4.8.1 和其他版本
产品 版本
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

CreateInstance(AppDomain, String, String)

使用命名程序集和无参数构造函数创建在指定远程域中指定名称的类型实例。

C#
public static System.Runtime.Remoting.ObjectHandle CreateInstance (AppDomain domain, string assemblyName, string typeName);
C#
[System.Security.SecurityCritical]
public static System.Runtime.Remoting.ObjectHandle CreateInstance (AppDomain domain, string assemblyName, string typeName);

参数

domain
AppDomain

在其中创建名为 typeName 类型的远程域。

assemblyName
String

要在其中寻找名为 typeName 类型的程序集的名称。 如果 assemblyNamenull,则会搜索正在执行的程序集。

typeName
String

要创建其实例的类型的完全限定名称。

返回

必须取消包装才能访问新创建的对象或 Nullable<T> 实例 null 的句柄。

属性

例外

typeNamedomainnull

找不到匹配的公共构造函数。

assemblyName中找不到 typeName

找不到 assemblyName

调用方无权调用此构造函数。

无法创建抽象类型的实例。

-或-

此成员是使用后期绑定机制调用的。

通过反射调用的构造函数引发异常。

COM 类型不是通过 GetTypeFromProgIDGetTypeFromCLSID获取的。

不支持创建 TypedReferenceArgIteratorVoidRuntimeArgumentHandle 类型或这些类型的数组。

assemblyName 不是有效的程序集。

-或-

公共语言运行时 (CLR) 版本 2.0 或更高版本当前已加载,并且已针对低于当前加载版本的 CLR 编译 assemblyName。 请注意,.NET Framework 版本 2.0、3.0 和 3.5 均使用 CLR 版本 2.0。

程序集或模块加载了两次,其中包含两个不同的证据。

-或-

程序集名称或基本代码无效。

注解

当主机需要在具有受限安全权限的应用程序域中执行代码时,请使用 CreateInstance

使用 ObjectHandle.Unwrap 解包返回值。

适用于

.NET Framework 4.8.1 和其他版本
产品 版本
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

CreateInstance<T>()

Source:
Activator.RuntimeType.cs
Source:
Activator.RuntimeType.cs
Source:
Activator.RuntimeType.cs

使用无参数构造函数创建由指定泛型类型参数指定的类型的实例。

C#
public static T CreateInstance<T> ();

类型参数

T

要创建的类型。

返回

T

对新创建的对象或 Nullable<T> 实例 null 的引用。

例外

无法创建抽象类的实例,或者为 T 指定的类型没有无参数构造函数。

注意:在适用于 Windows 应用商店应用的 .NET 中,可移植类库,请改为捕获基类异常,MissingMemberException

注解

编译器使用 CreateInstance<T>() 泛型方法实现类型参数指定的类型的实例化。 例如,在以下泛型方法中,new T()(C++ 中的gcnew T())的实现使用 CreateInstance<T>() 泛型方法。

C#
public static T Factory<T>() where T : new()
{
    return new T();
}

一般情况下,应用程序代码中没有 CreateInstance<T>() 泛型方法的使用,因为类型必须在编译时知道。 如果类型在编译时已知,则可以使用普通实例化语法(C# 中的new 运算符,New Visual Basic 中的 gcnew C++)。 如果类型在编译时未知,则可以调用非泛型重载 CreateInstance

没有采用参数列表的 CreateInstance<T>() 泛型方法的重载,因为 CreateInstance 的非泛型重载已提供后期绑定构造函数解析。

适用于

.NET 9 和其他版本
产品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0