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.

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

public:
 static System::Runtime::Remoting::ObjectHandle ^ CreateInstance(AppDomain ^ domain, System::String ^ assemblyName, System::String ^ typeName, bool ignoreCase, System::Reflection::BindingFlags bindingAttr, System::Reflection::Binder ^ binder, cli::array <System::Object ^> ^ args, System::Globalization::CultureInfo ^ culture, cli::array <System::Object ^> ^ activationAttributes, System::Security::Policy::Evidence ^ securityAttributes);
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);
[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);
static member CreateInstance : AppDomain * string * string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] * System.Security.Policy.Evidence -> System.Runtime.Remoting.ObjectHandle
[<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>]
static member CreateInstance : AppDomain * string * string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] * System.Security.Policy.Evidence -> System.Runtime.Remoting.ObjectHandle
Public Shared Function CreateInstance (domain As AppDomain, assemblyName As String, typeName As String, ignoreCase As Boolean, bindingAttr As BindingFlags, binder As Binder, args As Object(), culture As CultureInfo, activationAttributes As Object(), securityAttributes As Evidence) As ObjectHandle

参数

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 解包返回值。

适用于

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

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

public:
 static System::Runtime::Remoting::ObjectHandle ^ CreateInstance(AppDomain ^ domain, System::String ^ assemblyName, System::String ^ typeName, bool ignoreCase, System::Reflection::BindingFlags bindingAttr, System::Reflection::Binder ^ binder, cli::array <System::Object ^> ^ args, System::Globalization::CultureInfo ^ culture, cli::array <System::Object ^> ^ activationAttributes);
[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.SecurityCritical>]
static member CreateInstance : AppDomain * string * string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] -> System.Runtime.Remoting.ObjectHandle
Public Shared Function CreateInstance (domain As AppDomain, assemblyName As String, typeName As String, ignoreCase As Boolean, bindingAttr As BindingFlags, binder As Binder, args As Object(), culture As CultureInfo, activationAttributes As Object()) As ObjectHandle

参数

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 解包返回值。

适用于

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

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

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

public:
 static System::Runtime::Remoting::ObjectHandle ^ CreateInstance(System::String ^ assemblyName, System::String ^ typeName, bool ignoreCase, System::Reflection::BindingFlags bindingAttr, System::Reflection::Binder ^ binder, cli::array <System::Object ^> ^ args, System::Globalization::CultureInfo ^ culture, cli::array <System::Object ^> ^ activationAttributes);
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);
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);
static member CreateInstance : string * string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] -> System.Runtime.Remoting.ObjectHandle
Public Shared Function CreateInstance (assemblyName As String, typeName As String, ignoreCase As Boolean, bindingAttr As BindingFlags, binder As Binder, args As Object(), culture As CultureInfo, activationAttributes As Object()) As ObjectHandle

参数

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 或更高版本。

适用于

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

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

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

public:
 static System::Object ^ CreateInstance(Type ^ type, System::Reflection::BindingFlags bindingAttr, System::Reflection::Binder ^ binder, cli::array <System::Object ^> ^ args, System::Globalization::CultureInfo ^ culture, cli::array <System::Object ^> ^ activationAttributes);
public static object? CreateInstance (Type type, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, object?[]? args, System.Globalization.CultureInfo? culture, object?[]? activationAttributes);
public static object CreateInstance (Type type, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes);
static member CreateInstance : Type * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] -> obj
Public Shared Function CreateInstance (type As Type, bindingAttr As BindingFlags, binder As Binder, args As Object(), culture As CultureInfo, activationAttributes As Object()) As Object

参数

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 或更高版本。

适用于

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

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

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

public:
 static System::Object ^ CreateInstance(Type ^ type, System::Reflection::BindingFlags bindingAttr, System::Reflection::Binder ^ binder, cli::array <System::Object ^> ^ args, System::Globalization::CultureInfo ^ culture);
public static object? CreateInstance (Type type, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, object?[]? args, System.Globalization.CultureInfo? culture);
public static object CreateInstance (Type type, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture);
static member CreateInstance : Type * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo -> obj
Public Shared Function CreateInstance (type As Type, bindingAttr As BindingFlags, binder As Binder, args As Object(), culture As CultureInfo) As Object

参数

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 或更高版本。

适用于

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

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

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

public:
 static System::Object ^ CreateInstance(Type ^ type, cli::array <System::Object ^> ^ args, cli::array <System::Object ^> ^ activationAttributes);
public static object? CreateInstance (Type type, object?[]? args, object?[]? activationAttributes);
public static object CreateInstance (Type type, object[] args, object[] activationAttributes);
static member CreateInstance : Type * obj[] * obj[] -> obj
Public Shared Function CreateInstance (type As Type, args As Object(), activationAttributes As Object()) As Object

参数

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 或更高版本。

适用于

CreateInstance(String, String, Object[])

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

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

public:
 static System::Runtime::Remoting::ObjectHandle ^ CreateInstance(System::String ^ assemblyName, System::String ^ typeName, cli::array <System::Object ^> ^ activationAttributes);
public static System.Runtime.Remoting.ObjectHandle? CreateInstance (string assemblyName, string typeName, object?[]? activationAttributes);
public static System.Runtime.Remoting.ObjectHandle CreateInstance (string assemblyName, string typeName, object[] activationAttributes);
static member CreateInstance : string * string * obj[] -> System.Runtime.Remoting.ObjectHandle
Public Shared Function CreateInstance (assemblyName As String, typeName As String, activationAttributes As Object()) As ObjectHandle

参数

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 或更高版本。

适用于

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.

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

public:
 static System::Runtime::Remoting::ObjectHandle ^ CreateInstance(System::String ^ assemblyName, System::String ^ typeName, bool ignoreCase, System::Reflection::BindingFlags bindingAttr, System::Reflection::Binder ^ binder, cli::array <System::Object ^> ^ args, System::Globalization::CultureInfo ^ culture, cli::array <System::Object ^> ^ activationAttributes, System::Security::Policy::Evidence ^ securityInfo);
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);
[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);
static member CreateInstance : string * string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] * System.Security.Policy.Evidence -> System.Runtime.Remoting.ObjectHandle
[<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.")>]
static member CreateInstance : string * string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] * System.Security.Policy.Evidence -> System.Runtime.Remoting.ObjectHandle
Public Shared Function CreateInstance (assemblyName As String, typeName As String, ignoreCase As Boolean, bindingAttr As BindingFlags, binder As Binder, args As Object(), culture As CultureInfo, activationAttributes As Object(), securityInfo As Evidence) As ObjectHandle

参数

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 或更高版本。

适用于

CreateInstance(Type, Object[])

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

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

public:
 static System::Object ^ CreateInstance(Type ^ type, ... cli::array <System::Object ^> ^ args);
public:
 static System::Object ^ CreateInstance(Type ^ type, cli::array <System::Object ^> ^ args);
public static object CreateInstance (Type type, params object[] args);
public static object? CreateInstance (Type type, params object?[]? args);
public static object CreateInstance (Type type, object[] args);
static member CreateInstance : Type * obj[] -> obj
Public Shared Function CreateInstance (type As Type, ParamArray args As Object()) As Object
Public Shared Function CreateInstance (type As Type, args As Object()) As Object

参数

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) 构造函数来实例化一个字符串,该字符串包含从第十四个位置开始的字符数组中的十个元素。

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
open System

// Initialize array of characters from a to z.
let chars = [| 'a' .. 'z' |]

let obj = Activator.CreateInstance(typeof<string>, chars[13..22])

printfn $"{obj}"

// The example displays the following output:
//       nopqrstuvw
Module Example
   Public Sub Main()
      ' Initialize array of characters from a to z.
      Dim chars(25) As Char 
      For ctr As Short = 0 To 25
         chars(ctr) = ChrW(ctr + &h0061)
      Next 
      Dim obj As Object = Activator.CreateInstance(GetType(String),
                                                   { chars, 13, 10 })
      Console.WriteLine(obj)                                          
   End Sub
End Module
' The example displays the following output:
'       nopqrstuvw

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

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
open System

let chars = [| 'a' .. 'f' |]

let arguments =
    [| chars
       chars[1..4]
       Array.create 20 chars[1] |]

for args in arguments do
    let result =
        Activator.CreateInstance(typeof<string>, args)

    printfn $"{result.GetType().Name}: {result}"

// The example displays the following output:
//    String: abcdef
//    String: bcde
//    String: bbbbbbbbbbbbbbbbbbbb
Module Example
   Public Sub Main()
      Dim characters() As Char = { "a"c, "b"c, "c"c, "d"c, "e"c, "f"c }
      Dim arguments()() As Object = new Object(2)() { New Object() { characters },
                                                      New Object() { characters, 1, 4 },
                                                      New Object() { characters(1), 20 } }

      For ctr As Integer = 0 To arguments.GetUpperBound(0)
         Dim args() As Object = arguments(ctr)
         Dim result As Object = Activator.CreateInstance(GetType(String), args)
         Console.WriteLine("{0}: {1}", result.GetType().Name, result)
      Next
   End Sub
End Module
' The example displays the following output:
'       String: abcdef
'       String: bcde
'       String: bbbbbbbbbbbbbbbbbbbb

注解

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

注意

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

适用于

CreateInstance(Type, Boolean)

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

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

public:
 static System::Object ^ CreateInstance(Type ^ type, bool nonPublic);
public static object? CreateInstance (Type type, bool nonPublic);
public static object CreateInstance (Type type, bool nonPublic);
static member CreateInstance : Type * bool -> obj
Public Shared Function CreateInstance (type As Type, nonPublic As Boolean) As Object

参数

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 或更高版本。

适用于

CreateInstance(String, String)

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

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

public:
 static System::Runtime::Remoting::ObjectHandle ^ CreateInstance(System::String ^ assemblyName, System::String ^ typeName);
public static System.Runtime.Remoting.ObjectHandle? CreateInstance (string assemblyName, string typeName);
public static System.Runtime.Remoting.ObjectHandle CreateInstance (string assemblyName, string typeName);
static member CreateInstance : string * string -> System.Runtime.Remoting.ObjectHandle
Public Shared Function CreateInstance (assemblyName As String, typeName As String) As ObjectHandle

参数

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 类有两个构造函数,其中一个是无参数的。

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;
   }
}
type Person(name) =
    member val Name = name with get, set

    override this.ToString() = this.Name

    new () = Person Unchecked.defaultof<string>
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

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

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
open System

let handle = Activator.CreateInstance("PersonInfo", "Person")
let p = handle.Unwrap() :?> Person
p.Name <- "Samuel"
printfn $"{p}"

// The example displays the following output:
//        Samuel
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

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

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
open System

let handle =
    Activator.CreateInstance("PersonInfo", "Person")

let p = handle.Unwrap()
let t = p.GetType()
let prop = t.GetProperty "Name"

if not (isNull prop) then
    prop.SetValue(p, "Samuel")

let method = t.GetMethod "ToString"
let retVal = method.Invoke(p, null)

if not (isNull retVal) then
    printfn $"{retVal}"

// The example displays the following output:
//        Samuel
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

注解

使用 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 或更高版本。

适用于

CreateInstance(ActivationContext, String[])

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

public:
 static System::Runtime::Remoting::ObjectHandle ^ CreateInstance(ActivationContext ^ activationContext, cli::array <System::String ^> ^ activationCustomData);
public static System.Runtime.Remoting.ObjectHandle CreateInstance (ActivationContext activationContext, string[] activationCustomData);
static member CreateInstance : ActivationContext * string[] -> System.Runtime.Remoting.ObjectHandle
Public Shared Function CreateInstance (activationContext As ActivationContext, activationCustomData As String()) As ObjectHandle

参数

activationContext
ActivationContext

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

activationCustomData
String[]

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

返回

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

注解

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

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

另请参阅

适用于

CreateInstance(Type)

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

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

public:
 static System::Object ^ CreateInstance(Type ^ type);
public static object CreateInstance (Type type);
public static object? CreateInstance (Type type);
static member CreateInstance : Type -> obj
Public Shared Function CreateInstance (type As Type) As Object

参数

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) 方法。 创建多个不同类型的实例并显示其默认值。

using namespace System;

ref class DynamicInstanceList
{
private:
    static String^ instanceSpec = "System.EventArgs;System.Random;" +
        "System.Exception;System.Object;System.Version";

public:
    static void Main()
    {
        array<String^>^ instances = instanceSpec->Split(';');
        Array^ instlist = Array::CreateInstance(Object::typeid, 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");
        for each (Object^ o in instlist)
        {
            Console::WriteLine("Type:     {0}\nValue:    {1}\nHashCode: {2}\n",
                o->GetType()->FullName, o->ToString(), o->GetHashCode());
        }
    }
};

int main()
{
    DynamicInstanceList::Main();
}

// 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
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
open System

let instanceSpec =
    "System.EventArgs;System.Random;System.Exception;System.Object;System.Version"

let instances = instanceSpec.Split ';'
let instlist = Array.zeroCreate instances.Length
let mutable item = obj ()

for i = 0 to instances.Length - 1 do
    // create the object from the specification string
    printfn $"Creating instance of: {instances.[i]}"
    item <- Activator.CreateInstance(Type.GetType instances.[i])
    instlist.[i] <- item

printfn "\nObjects and their default values:\n"

for o in instlist do
    printfn $"Type:     {o.GetType().FullName}\nValue:    {o}\nHashCode: {o.GetHashCode()}\n"


// 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
Class DynamicInstanceList
    Private Shared instanceSpec As String = "System.EventArgs;System.Random;" + _
        "System.Exception;System.Object;System.Version"

    Public Shared Sub Main()
        Dim instances() As String = instanceSpec.Split(";")
        Dim instlist As Array = Array.CreateInstance(GetType(Object), instances.Length)
        Dim item As Object

        For i As Integer = 0 To instances.Length -1
            ' 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)
        Next i
        Console.WriteLine(Environment.NewLine + "Objects and their default values:" + Environment.NewLine)
        For Each o As Object In instlist
            Console.WriteLine("Type:     {0}" + Environment.NewLine + "Value:    {1}" + _
                Environment.NewLine + "HashCode: {2}" + Environment.NewLine, _
                o.GetType().FullName, o.ToString(), o.GetHashCode())
        Next o
    End Sub
End Class

' 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 或更高版本。

适用于

CreateInstance(ActivationContext)

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

public:
 static System::Runtime::Remoting::ObjectHandle ^ CreateInstance(ActivationContext ^ activationContext);
public static System.Runtime.Remoting.ObjectHandle CreateInstance (ActivationContext activationContext);
static member CreateInstance : ActivationContext -> System.Runtime.Remoting.ObjectHandle
Public Shared Function CreateInstance (activationContext As ActivationContext) As ObjectHandle

参数

activationContext
ActivationContext

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

返回

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

注解

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

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

另请参阅

适用于

CreateInstance(AppDomain, String, String)

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

public:
 static System::Runtime::Remoting::ObjectHandle ^ CreateInstance(AppDomain ^ domain, System::String ^ assemblyName, System::String ^ typeName);
public static System.Runtime.Remoting.ObjectHandle CreateInstance (AppDomain domain, string assemblyName, string typeName);
[System.Security.SecurityCritical]
public static System.Runtime.Remoting.ObjectHandle CreateInstance (AppDomain domain, string assemblyName, string typeName);
static member CreateInstance : AppDomain * string * string -> System.Runtime.Remoting.ObjectHandle
[<System.Security.SecurityCritical>]
static member CreateInstance : AppDomain * string * string -> System.Runtime.Remoting.ObjectHandle
Public Shared Function CreateInstance (domain As AppDomain, assemblyName As String, typeName As String) As ObjectHandle

参数

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 解包返回值。

适用于

CreateInstance<T>()

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

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

public:
generic <typename T>
 static T CreateInstance();
public static T CreateInstance<T> ();
static member CreateInstance : unit -> 'T
Public Shared Function CreateInstance(Of T) () As T

类型参数

T

要创建的类型。

返回

T

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

例外

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

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

注解

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

public:
    generic <typename T> where T:gcnew()
    static T Bar()
    {
        return gcnew T();
    }
public static T Factory<T>() where T : new()
{
    return new T();
}
let factory<'T when 'T : (new: unit -> 'T)> =
    new 'T()
Public Shared Function Factory(Of T As New)() As T
    Return New T()
End Function

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

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

适用于