System.AppDomain.CreateInstanceAndUnwrap 方法 (String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[])
方法描述
创建在指定的程序集中定义的指定类型的新实例,指定是否忽略类型名称的大小写,并指定绑定特性和用于选择要创建的类型的联编程序、构造函数的参数、区域性以及激活特性。
语法定义(C# System.AppDomain.CreateInstanceAndUnwrap 方法 (String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[]) 的用法)
public Object CreateInstanceAndUnwrap( string assemblyName, string typeName, bool ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes )
参数/返回值
| 参数值/返回值 | 参数类型/返回类型 | 参数描述/返回描述 |
|---|---|---|
| assemblyName | System-String | 程序集的显示名称。请参见 Assembly.FullName。 |
| typeName | System-String | Type.FullName 属性返回的所请求类型的完全限定名称,包含命名空间而不是程序集。 |
| ignoreCase | System-Boolean | 一个布尔值,指示是否执行区分大小写的搜索。 |
| bindingAttr | System-Reflection-BindingFlags | 影响 typeName 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零,则对公共构造函数进行区分大小写的搜索。 |
| binder | System-Reflection-Binder | 一个对象,它使用反射启用绑定、实参类型的强制、成员的调用和 MemberInfo 对象的检索。如果 binder 为 null,则使用默认联编程序。 |
| args | System-Object[] | 要传递给构造函数的实参。此实参数组必须在数量、顺序和类型方面与要调用的构造函数的形参匹配。如果默认的构造函数是首选构造函数,则 args 必须为空数组或 Null。 |
| culture | System-Globalization-CultureInfo | 用于控制类型强制的特定于区域性的对象。如果 culture 为 null,则使用当前线程的 CultureInfo。 |
| activationAttributes | System-Object[] | 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。 |
| 返回值 | System.Object | typeName 所指定对象的实例。 |
提示和注释
这是合并 CreateInstance 和 ObjectHandle.Unwrap 的便捷方法。
有关 assemblyName 的格式,请参见 AssemblyName。 有关 typeName 的格式,请参见 Type.FullName 属性。
activationAttributes 参数与客户端激活对象相关;请参见Client Activation。
注意
如果对 CreateInstanceAndUnwrap 返回的 T1 类型对象的 M 方法进行早期绑定调用,而该方法对当前程序集或包含 T1 的程序集以外的程序集 C 中的 T2 类型对象的方法进行早期绑定调用,则程序集 C 将加载到当前应用程序域中。 即使对 T1.M() 的早期绑定调用在 DynamicMethod 的函数体或其他动态生成的代码中进行,仍将发生此加载。 如果当前域是默认域,则在进程结束前无法卸载程序集 C。 如果当前域稍后尝试加载程序集 C,则加载可能失败。
System.AppDomain.CreateInstanceAndUnwrap 方法 (String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[])例子
下面的示例演示如何使用 ignoreCase 形参。
using System;
using System.Reflection;
class Test {
static void Main() {
InstantiateINT32(false); // Failed!
InstantiateINT32(true); // OK!
}
static void InstantiateINT32(bool ignoreCase) {
try {
AppDomain currentDomain = AppDomain.CurrentDomain;
object instance = currentDomain.CreateInstanceAndUnwrap(
"mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"SYSTEM.INT32",
ignoreCase,
BindingFlags.Default,
null,
null,
null,
null,
null
);
Console.WriteLine(instance.GetType());
} catch (TypeLoadException e) {
Console.WriteLine(e.Message);
}
}
}
异常
| 异常 | 异常描述 |
|---|---|
| ArgumentNullException | assemblyName 或 typeName 为 null。 |
| MissingMethodException | 未找到匹配的构造函数。 |
| TypeLoadException | 在 assemblyName 中找不到 typename。 |
| FileNotFoundException | 未找到 assemblyName。 |
| MethodAccessException | 调用方没有调用此构造函数的权限。 |
| NotSupportedException | 调用方无法为不是从 MarshalByRefObject 继承的对象提供激活特性。 |
| AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。 |
| BadImageFormatException |
|
| FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。 |
版本信息
.NET Framework 受以下版本支持:4 .NET Framework Client Profile 受以下版本支持:4
适用平台
Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。