System.AppDomain.CreateInstanceAndUnwrap 方法 (String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[], Evidence)

方法描述

创建指定类型的新实例。 形参指定类型的名称以及查找和创建该类型的方式。

语法定义(C# System.AppDomain.CreateInstanceAndUnwrap 方法 (String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[], Evidence) 的用法)

[ObsoleteAttribute("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 CreateInstanceAndUnwrap which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public Object CreateInstanceAndUnwrap(
	string assemblyName,
	string typeName,
	bool ignoreCase,
	BindingFlags bindingAttr,
	Binder binder,
	Object[] args,
	CultureInfo culture,
	Object[] activationAttributes,
	Evidence securityAttributes
)

参数/返回值

参数值/返回值 参数类型/返回类型 参数描述/返回描述
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。
securityAttributes System-Security-Policy-Evidence 用于授权创建 typeName 的信息。
返回值 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[], Evidence)例子

下面的示例演示如何使用 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
  • assemblyName 不是有效程序集。
  • 当前加载的是 2.0 或更高版本的公共语言运行时,而 assemblyName 是用更高版本的公共语言运行时编译的。
FileLoadException 用两个不同的证据将一个程序集或模块加载了两次。

命名空间

namespace: System

程序集: mscorlib(在 mscorlib.dll 中)

版本信息

.NET Framework 受以下版本支持:3.5、3.0、2.0、1.1、1.0 在 4 中过时(编译器警告) .NET Framework Client Profile 受以下版本支持:3.5 SP1 在 4 中过时(编译器警告)

适用平台

Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。