Activator.CreateInstance 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
使用与指定参数最匹配的构造函数创建指定类型的实例。
重载
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
类型的程序集的名称。 如果 assemblyName
null
,则会搜索正在执行的程序集。
- typeName
- String
要创建其实例的类型的完全限定名称。
- ignoreCase
- Boolean
true
指定搜索 typeName
不区分大小写;false
指定搜索区分大小写。
- bindingAttr
- BindingFlags
影响搜索 typeName
构造函数的零个或多个位标志的组合。 如果 bindingAttr
为零,则会对公共构造函数执行区分大小写的搜索。
- binder
- Binder
使用 bindingAttr
和 args
查找和标识 typeName
构造函数的对象。 如果 binder
null
,则使用默认绑定器。
- args
- Object[]
一个参数数组,这些参数以数字、顺序和键入要调用的构造函数的参数。 如果 args
为空数组或 null
,则调用不带参数的构造函数(无参数构造函数)。
- culture
- CultureInfo
控制 args
强制 typeName
构造函数声明的正式类型的区域性特定信息。 如果 culture
null
,则使用当前线程的 CultureInfo。
- activationAttributes
- Object[]
可以参与激活的一个或多个属性的数组。 这通常是包含单个 UrlAttribute 对象的数组。 UrlAttribute 指定激活远程对象所需的 URL。
- securityAttributes
- Evidence
用于做出安全策略决策并授予代码权限的信息。
返回
必须解包的句柄才能访问新创建的对象,或者 Nullable<T> 实例 null
,且没有值。
- 属性
例外
domain
或 typeName
null
。
找不到匹配的构造函数。
assemblyName
中找不到 typeName
。
找不到 assemblyName
。
调用方无权调用此构造函数。
无法创建抽象类的实例,或者此成员是使用后期绑定机制调用的。
通过反射调用的构造函数引发异常。
COM 类型不是通过 GetTypeFromProgID 或 GetTypeFromCLSID获取的。
不支持创建 TypedReference、ArgIterator、Void和 RuntimeArgumentHandle 类型或这些类型的数组。
-或-
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
类型的程序集的名称。 如果 assemblyName
null
,则会搜索正在执行的程序集。
- typeName
- String
要创建其实例的类型的完全限定名称。
- ignoreCase
- Boolean
true
指定搜索 typeName
不区分大小写;false
指定搜索区分大小写。
- bindingAttr
- BindingFlags
影响搜索 typeName
构造函数的零个或多个位标志的组合。 如果 bindingAttr
为零,则会对公共构造函数执行区分大小写的搜索。
- binder
- Binder
使用 bindingAttr
和 args
查找和标识 typeName
构造函数的对象。 如果 binder
null
,则使用默认绑定器。
- args
- Object[]
一个参数数组,这些参数以数字、顺序和键入要调用的构造函数的参数。 如果 args
为空数组或 null
,则调用不带参数的构造函数(无参数构造函数)。
- culture
- CultureInfo
控制 args
强制 typeName
构造函数声明的正式类型的区域性特定信息。 如果 culture
null
,则使用当前线程的 CultureInfo。
- activationAttributes
- Object[]
可以参与激活的一个或多个属性的数组。 这通常是一个数组,其中包含一个 UrlAttribute 对象,该对象指定激活远程对象所需的 URL。
此参数与客户端激活的对象相关。 客户端激活是保留的旧技术,用于向后兼容,但不建议用于新开发。 分布式应用程序应改用 Windows Communication Foundation。
返回
必须解包的句柄才能访问新创建的对象,或者 Nullable<T> 实例 null
,且没有值。
- 属性
例外
domain
或 typeName
null
。
找不到匹配的构造函数。
assemblyName
中找不到 typeName
。
找不到 assemblyName
。
调用方无权调用此构造函数。
无法创建抽象类的实例,或者此成员是使用后期绑定机制调用的。
通过反射调用的构造函数引发异常。
COM 类型不是通过 GetTypeFromProgID 或 GetTypeFromCLSID获取的。
不支持创建 TypedReference、ArgIterator、Void和 RuntimeArgumentHandle 类型或这些类型的数组。
-或-
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
类型的程序集的名称。 如果 assemblyName
null
,则会搜索正在执行的程序集。
- typeName
- String
要创建其实例的类型的完全限定名称。
- ignoreCase
- Boolean
true
指定搜索 typeName
不区分大小写;false
指定搜索区分大小写。
- bindingAttr
- BindingFlags
影响搜索 typeName
构造函数的零个或多个位标志的组合。 如果 bindingAttr
为零,则会对公共构造函数执行区分大小写的搜索。
- binder
- Binder
使用 bindingAttr
和 args
查找和标识 typeName
构造函数的对象。 如果 binder
null
,则使用默认绑定器。
- args
- Object[]
一个参数数组,这些参数以数字、顺序和键入要调用的构造函数的参数。 如果 args
为空数组或 null
,则调用不带参数的构造函数(无参数构造函数)。
- culture
- CultureInfo
控制 args
强制 typeName
构造函数声明的正式类型的区域性特定信息。 如果 culture
null
,则使用当前线程的 CultureInfo。
- activationAttributes
- Object[]
可以参与激活的一个或多个属性的数组。 这通常是一个数组,其中包含一个 UrlAttribute 对象,该对象指定激活远程对象所需的 URL。
此参数与客户端激活的对象相关。 客户端激活是保留的旧技术,用于向后兼容,但不建议用于新开发。 分布式应用程序应改用 Windows Communication Foundation。
返回
必须解包的句柄才能访问新创建的实例,或 null
没有值的 Nullable<T> 实例。
例外
typeName
null
。
找不到匹配的构造函数。
assemblyName
中找不到 typeName
。
找不到 assemblyName
。
调用方无权调用此构造函数。
无法创建抽象类的实例,或者此成员是使用后期绑定机制调用的。
通过反射调用的构造函数引发异常。
COM 类型不是通过 GetTypeFromProgID 或 GetTypeFromCLSID获取的。
不支持创建 TypedReference、ArgIterator、Void和 RuntimeArgumentHandle 类型或这些类型的数组。
-或-
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,并且包含非公共类型和成员的程序集的授予集仅限于调用方授予集或子集,则此方法可用于创建非公共类型和成员。 (请参阅反射
适用于
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
使用 bindingAttr
和 args
查找和标识 type
构造函数的对象。 如果 binder
null
,则使用默认绑定器。
- args
- Object[]
一个参数数组,这些参数以数字、顺序和键入要调用的构造函数的参数。 如果 args
为空数组或 null
,则调用不带参数的构造函数(无参数构造函数)。
- culture
- CultureInfo
控制 args
强制 type
构造函数声明的正式类型的区域性特定信息。 如果 culture
null
,则使用当前线程的 CultureInfo。
- activationAttributes
- Object[]
可以参与激活的一个或多个属性的数组。 这通常是一个数组,其中包含一个 UrlAttribute 对象,该对象指定激活远程对象所需的 URL。
此参数与客户端激活的对象相关。 客户端激活是保留的旧技术,用于向后兼容,但不建议用于新开发。 分布式应用程序应改用 Windows Communication Foundation。
返回
对新创建的对象的引用,或 Nullable<T> 实例没有值的 null
。
例外
type
null
。
type
不能是 TypeBuilder。
-或-
不支持创建 TypedReference、ArgIterator、Void和 RuntimeArgumentHandle 类型或这些类型的数组。
-或-
activationAttributes
不是空数组,所创建的类型不派生自 MarshalByRefObject。
-或-
包含 type
的程序集是使用 Save创建的动态程序集。
-或-
与 args
最匹配的构造函数具有 varargs
参数。
被调用的构造函数将引发异常。
调用方无权调用此构造函数。
无法创建抽象类的实例,或者此成员是使用后期绑定机制调用的。
COM 类型不是通过 GetTypeFromProgID 或 GetTypeFromCLSID获取的。
找不到匹配的构造函数。
type
是 COM 对象,但用于获取类型的类标识符无效,或者未注册已标识的类。
type
不是有效的类型。
注解
要调用的构造函数必须在指定的绑定器和绑定属性的约束下提供与指定参数列表最具体的匹配项。
注意
从 .NET Framework 2.0 开始,此方法可用于访问非公共类型和成员(如果调用方已获得 ReflectionPermissionFlag.RestrictedMemberAccess 标志 ReflectionPermission,以及非公共类型和成员的授予集限制为调用方授予集或子集)。 (请参阅反射
适用于
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
使用 bindingAttr
和 args
查找和标识 type
构造函数的对象。 如果 binder
null
,则使用默认绑定器。
- args
- Object[]
一个参数数组,这些参数以数字、顺序和键入要调用的构造函数的参数。 如果 args
为空数组或 null
,则调用不带参数的构造函数(无参数构造函数)。
- culture
- CultureInfo
控制 args
强制 type
构造函数声明的正式类型的区域性特定信息。 如果 culture
null
,则使用当前线程的 CultureInfo。
返回
对新创建的对象的引用,或 Nullable<T> 实例没有值的 null
。
例外
type
null
。
type
不能是 TypeBuilder。
-或-
不支持创建 TypedReference、ArgIterator、Void和 RuntimeArgumentHandle 类型或这些类型的数组。
-或-
包含 type
的程序集是使用 Save创建的动态程序集。
-或-
与 args
最匹配的构造函数具有 varargs
参数。
被调用的构造函数将引发异常。
调用方无权调用此构造函数。
无法创建抽象类的实例,或者此成员是使用后期绑定机制调用的。
COM 类型不是通过 GetTypeFromProgID 或 GetTypeFromCLSID获取的。
找不到匹配的构造函数。
type
是 COM 对象,但用于获取类型的类标识符无效,或者未注册已标识的类。
type
不是有效的类型。
注解
要调用的构造函数必须在指定的绑定器和绑定属性的约束下提供与指定参数列表最具体的匹配项。
注意
从 .NET Framework 2.0 开始,如果使用 ReflectionPermissionFlag.RestrictedMemberAccess 标志向调用方授予 ReflectionPermission,并且包含非公共类型和成员的程序集的授予集仅限于调用方授予集或子集,则此方法可用于访问非公共类型和成员。 (请参阅反射
适用于
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
不能是 TypeBuilder。
-或-
不支持创建 TypedReference、ArgIterator、Void和 RuntimeArgumentHandle 类型或这些类型的数组。
-或-
activationAttributes
不是空数组,所创建的类型不派生自 MarshalByRefObject。
-或-
包含 type
的程序集是使用 Save创建的动态程序集。
-或-
与 args
最匹配的构造函数具有 varargs
参数。
被调用的构造函数将引发异常。
调用方无权调用此构造函数。
无法创建抽象类的实例,或者此成员是使用后期绑定机制调用的。
COM 类型不是通过 GetTypeFromProgID 或 GetTypeFromCLSID获取的。
找不到匹配的公共构造函数。
type
是 COM 对象,但用于获取类型的类标识符无效,或者未注册已标识的类。
type
不是有效的类型。
注解
要调用的构造函数必须可访问,并且必须提供与指定参数列表最具体的匹配项。
注意
从 .NET Framework 2.0 开始,如果调用方已获得 ReflectionPermissionFlag.RestrictedMemberAccess 标志 ReflectionPermission,并且包含非公共类型的程序集的授予集仅限于调用方授予集或子集,则此方法可用于访问非公共类型。 (请参阅反射
适用于
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
类型的程序集的名称。 如果 assemblyName
null
,则会搜索正在执行的程序集。
- typeName
- String
要创建其实例的类型的完全限定名称。
- activationAttributes
- Object[]
可以参与激活的一个或多个属性的数组。 这通常是一个数组,其中包含一个 UrlAttribute 对象,该对象指定激活远程对象所需的 URL。
此参数与客户端激活的对象相关。 客户端激活是保留的旧技术,用于向后兼容,但不建议用于新开发。 分布式应用程序应改用 Windows Communication Foundation。
返回
必须取消包装才能访问新创建的对象或 Nullable<T> 实例 null
的句柄。
例外
typeName
null
。
找不到匹配的公共构造函数。
assemblyName
中找不到 typeName
。
找不到 assemblyName
。
调用方无权调用此构造函数。
无法创建抽象类的实例,或者此成员是使用后期绑定机制调用的。
COM 类型不是通过 GetTypeFromProgID 或 GetTypeFromCLSID获取的。
不支持创建 TypedReference、ArgIterator、Void和 RuntimeArgumentHandle 类型或这些类型的数组。
-或-
activationAttributes
不是空数组,所创建的类型不派生自 MarshalByRefObject。
-或-
activationAttributes
不是 UrlAttribute
数组。
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 并且非公共类型的授予集仅限于调用方授予集或子集,则此方法可用于创建非公共类型。 (请参阅反射
适用于
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
类型的程序集的名称。 如果 assemblyName
null
,则会搜索正在执行的程序集。
- typeName
- String
要创建其实例的类型的完全限定名称。
- ignoreCase
- Boolean
true
指定搜索 typeName
不区分大小写;false
指定搜索区分大小写。
- bindingAttr
- BindingFlags
影响搜索 typeName
构造函数的零个或多个位标志的组合。 如果 bindingAttr
为零,则会对公共构造函数执行区分大小写的搜索。
- binder
- Binder
使用 bindingAttr
和 args
查找和标识 typeName
构造函数的对象。 如果 binder
null
,则使用默认绑定器。
- args
- Object[]
一个参数数组,这些参数以数字、顺序和键入要调用的构造函数的参数。 如果 args
为空数组或 null
,则调用不带参数的构造函数(无参数构造函数)。
- culture
- CultureInfo
控制 args
强制 typeName
构造函数声明的正式类型的区域性特定信息。 如果 culture
null
,则使用当前线程的 CultureInfo。
- activationAttributes
- Object[]
可以参与激活的一个或多个属性的数组。 这通常是一个数组,其中包含一个 UrlAttribute 对象,该对象指定激活远程对象所需的 URL。
此参数与客户端激活的对象相关。 客户端激活是保留的旧技术,用于向后兼容,但不建议用于新开发。 分布式应用程序应改用 Windows Communication Foundation。
- securityInfo
- Evidence
用于做出安全策略决策并授予代码权限的信息。
返回
必须解包的句柄才能访问新创建的对象,或者 Nullable<T> 实例 null
,且没有值。
- 属性
例外
typeName
null
。
找不到匹配的构造函数。
assemblyName
中找不到 typeName
。
找不到 assemblyName
。
调用方无权调用此构造函数。
无法创建抽象类的实例,或者此成员是使用后期绑定机制调用的。
通过反射调用的构造函数引发异常。
COM 类型不是通过 GetTypeFromProgID 或 GetTypeFromCLSID获取的。
不支持创建 TypedReference、ArgIterator、Void和 RuntimeArgumentHandle 类型或这些类型的数组。
-或-
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,并且包含非公共类型和成员的程序集的授予集仅限于调用方授予集或子集,则此方法可用于创建非公共类型和成员。 (请参阅反射
适用于
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
不能是 TypeBuilder。
-或-
不支持创建 TypedReference、ArgIterator、Void和 RuntimeArgumentHandle 类型或这些类型的数组。
-或-
包含 type
的程序集是使用 Save创建的动态程序集。
-或-
与 args
最匹配的构造函数具有 varargs
参数。
被调用的构造函数将引发异常。
调用方无权调用此构造函数。
注意:在适用于 Windows 应用商店应用的 .NET 中, 或 可移植类库,请改为捕获基类异常,MemberAccessException。
无法创建抽象类的实例,或者此成员是使用后期绑定机制调用的。
COM 类型不是通过 GetTypeFromProgID 或 GetTypeFromCLSID获取的。
找不到匹配的公共构造函数。
注意:在适用于 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,并且包含非公共类型的程序集的授予集仅限于调用方授予集或子集,则此方法可用于访问非公共类型。 (请参阅反射
适用于
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
不能是 TypeBuilder。
-或-
不支持创建 TypedReference、ArgIterator、Void和 RuntimeArgumentHandle 类型或这些类型的数组。
-或-
包含 type
的程序集是使用 Save创建的动态程序集。
被调用的构造函数将引发异常。
调用方无权调用此构造函数。
无法创建抽象类的实例,或者此成员是使用后期绑定机制调用的。
COM 类型不是通过 GetTypeFromProgID 或 GetTypeFromCLSID获取的。
找不到匹配的公共构造函数。
type
是 COM 对象,但用于获取类型的类标识符无效,或者未注册已标识的类。
type
不是有效的类型。
注解
注意
从 .NET Framework 2.0 开始,如果使用 ReflectionPermissionFlag.RestrictedMemberAccess 标志向调用方授予 ReflectionPermission,并且包含非公共类型和成员的程序集的授予集仅限于调用方授予集或子集,则此方法可用于访问非公共类型和成员。 (请参阅反射
适用于
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
类型的程序集的名称。 如果 assemblyName
null
,则会搜索正在执行的程序集。
- typeName
- String
要创建其实例的类型的完全限定名称。
返回
必须取消包装才能访问新创建的对象或 Nullable<T> 实例 null
的句柄。
例外
typeName
null
。
找不到匹配的公共构造函数。
assemblyName
中找不到 typeName
。
找不到 assemblyName
。
调用方无权调用此构造函数。
不能创建抽象类的实例,或者此成员是使用后期绑定机制调用的。
通过反射调用的构造函数引发异常。
COM 类型不是通过 GetTypeFromProgID 或 GetTypeFromCLSID获取的。
不支持创建 TypedReference、ArgIterator、Void和 RuntimeArgumentHandle 类型或这些类型的数组。
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,并且包含非公共类型的程序集的授予集仅限于调用方授予集或子集,则此方法可用于创建非公共类型。 (请参阅反射
适用于
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
不能是 TypeBuilder。
-或-
不支持创建 TypedReference、ArgIterator、Void和 RuntimeArgumentHandle 类型或这些类型的数组。
-或-
包含 type
的程序集是使用 Save创建的动态程序集。
被调用的构造函数将引发异常。
调用方无权调用此构造函数。
注意:在适用于 Windows 应用商店应用的 .NET 中, 或 可移植类库,请改为捕获基类异常,MemberAccessException。
无法创建抽象类的实例,或者此成员是使用后期绑定机制调用的。
COM 类型不是通过 GetTypeFromProgID 或 GetTypeFromCLSID获取的。
找不到匹配的公共构造函数。
注意:在适用于 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,并且包含非公共类型的程序集的授予集仅限于调用方授予集或子集,则此方法可用于访问非公共类型。 (请参阅反射
适用于
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
类型的程序集的名称。 如果 assemblyName
null
,则会搜索正在执行的程序集。
- typeName
- String
要创建其实例的类型的完全限定名称。
返回
必须取消包装才能访问新创建的对象或 Nullable<T> 实例 null
的句柄。
- 属性
例外
typeName
或 domain
null
。
找不到匹配的公共构造函数。
assemblyName
中找不到 typeName
。
找不到 assemblyName
。
调用方无权调用此构造函数。
通过反射调用的构造函数引发异常。
COM 类型不是通过 GetTypeFromProgID 或 GetTypeFromCLSID获取的。
不支持创建 TypedReference、ArgIterator、Void和 RuntimeArgumentHandle 类型或这些类型的数组。
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
要创建的类型。
返回
对新创建的对象或 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 的非泛型重载已提供后期绑定构造函数解析。