Ler em inglês

Partilhar via


AppDomain.CreateInstanceAndUnwrap Método

Definição

Cria uma nova instância de um tipo especificado.

Sobrecargas

CreateInstanceAndUnwrap(String, String)

Cria uma nova instância do tipo especificado. Os parâmetros especificam o assembly em que o tipo é definido e o nome do tipo.

CreateInstanceAndUnwrap(String, String, Object[])

Cria uma nova instância do tipo especificado. Os parâmetros especificam o assembly em que o tipo é definido, o nome do tipo e uma matriz de atributos de ativação.

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

Cria uma nova instância do tipo especificado definido no assembly especificado, especificando se o caso do nome do tipo é ignorado; os atributos de associação e o associador que são usados para selecionar o tipo a ser criado; os argumentos do construtor; a cultura; e os atributos de ativação.

CreateInstanceAndUnwrap(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[], Evidence)
Obsoleto.

Cria uma nova instância do tipo especificado. Os parâmetros especificam o nome do tipo e como ele é encontrado e criado.

CreateInstanceAndUnwrap(String, String)

Origem:
AppDomain.cs
Origem:
AppDomain.cs
Origem:
AppDomain.cs

Cria uma nova instância do tipo especificado. Os parâmetros especificam o assembly em que o tipo é definido e o nome do tipo.

public object? CreateInstanceAndUnwrap (string assemblyName, string typeName);
public object CreateInstanceAndUnwrap (string assemblyName, string typeName);

Parâmetros

assemblyName
String

O nome de exibição do assembly. Consulte FullName.

typeName
String

O nome totalmente qualificado do tipo solicitado, incluindo o namespace, mas não o assembly, conforme retornado pela propriedade FullName.

Retornos

Uma instância do objeto especificada por typeName.

Exceções

assemblyName ou typeName é null.

Nenhum construtor público correspondente foi encontrado.

typeName não foi encontrado em assemblyName.

assemblyName não foi encontrado.

O chamador não tem permissão para chamar esse construtor.

A operação é tentada em um domínio de aplicativo descarregado.

assemblyName não é um assembly válido para o runtime carregado no momento.

Um assembly ou módulo foi carregado duas vezes com duas evidências diferentes.

Exemplos

O exemplo de código a seguir mostra a maneira mais simples de executar código em outro domínio de aplicativo. O exemplo define uma classe chamada Worker que herda de MarshalByRefObject. A classe Worker define um método que exibe o nome do domínio do aplicativo no qual está sendo executado. O exemplo cria instâncias de Worker no domínio de aplicativo padrão e em um novo domínio de aplicativo.

Nota

O assembly que contém Worker deve ser carregado em ambos os domínios do aplicativo, mas pode carregar outros assemblies que existem apenas no novo domínio do aplicativo.

using System;
using System.Reflection;

public class CreateInstanceWorker : MarshalByRefObject
{
    public void PrintDomain()
    {
        Console.WriteLine("Object is executing in AppDomain \"{0}\"",
            AppDomain.CurrentDomain.FriendlyName);
    }
}

class CreateInstanceAndUnwrapSourceSnippet
{
    public static void Main()
    {
        // Create an ordinary instance in the current AppDomain
        CreateInstanceWorker localWorker = new CreateInstanceWorker();
        localWorker.PrintDomain();

        // Create a new application domain, create an instance
        // of Worker in the application domain, and execute code
        // there.
        AppDomain ad = AppDomain.CreateDomain("New domain");
        CreateInstanceWorker remoteWorker = (CreateInstanceWorker) ad.CreateInstanceAndUnwrap(
            typeof(CreateInstanceWorker).Assembly.FullName,
            "Worker");
        remoteWorker.PrintDomain();
    }
}

/* This code produces output similar to the following:

Object is executing in AppDomain "source.exe"
Object is executing in AppDomain "New domain"
 */

Comentários

Este é um método de conveniência que combina CreateInstance e ObjectHandle.Unwrap. Esse método chama o construtor sem parâmetros para typeName.

Consulte AssemblyName para o formato de assemblyName. Consulte a propriedade Type.FullName para o formato de typeName.

Nota

Se você fizer uma chamada antecipada para um método M de um objeto do tipo T1 que foi retornado por CreateInstanceAndUnwrap, e esse método fizer uma chamada de associação inicial a um método de um objeto do tipo T2 em um assembly C diferente do assembly atual ou do assembly que contém T1, o assembly C será carregado no domínio do aplicativo atual. Esse carregamento ocorre mesmo se a chamada de limite inicial para T1.M() foi feita no corpo de uma DynamicMethodou em outro código gerado dinamicamente. Se o domínio atual for o domínio padrão, o assembly C não poderá ser descarregado até que o processo seja encerrado. Se o domínio atual tentar carregar o assembly Cposteriormente, a carga poderá falhar.

Confira também

Aplica-se a

.NET 9 e outras versões
Produto Versões
.NET Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

CreateInstanceAndUnwrap(String, String, Object[])

Origem:
AppDomain.cs
Origem:
AppDomain.cs
Origem:
AppDomain.cs

Cria uma nova instância do tipo especificado. Os parâmetros especificam o assembly em que o tipo é definido, o nome do tipo e uma matriz de atributos de ativação.

public object? CreateInstanceAndUnwrap (string assemblyName, string typeName, object?[]? activationAttributes);
public object CreateInstanceAndUnwrap (string assemblyName, string typeName, object[] activationAttributes);

Parâmetros

assemblyName
String

O nome de exibição do assembly. Consulte FullName.

typeName
String

O nome totalmente qualificado do tipo solicitado, incluindo o namespace, mas não o assembly, conforme retornado pela propriedade FullName.

activationAttributes
Object[]

Uma matriz de um ou mais atributos que podem participar da ativação. Normalmente, uma matriz que contém um único objeto UrlAttribute que especifica a URL necessária para ativar um objeto remoto.

Esse parâmetro está relacionado a objetos ativados pelo cliente. A ativação do cliente é uma tecnologia herdada que é retida para compatibilidade com versões anteriores, mas não é recomendada para o novo desenvolvimento. Em vez disso, os aplicativos distribuídos devem usar o Windows Communication Foundation.

Retornos

Uma instância do objeto especificada por typeName.

Exceções

assemblyName ou typeName é null.

Nenhum construtor público correspondente foi encontrado.

typeName não foi encontrado em assemblyName.

assemblyName não foi encontrado.

O chamador não tem permissão para chamar esse construtor.

O chamador não pode fornecer atributos de ativação para um objeto que não herda de MarshalByRefObject.

A operação é tentada em um domínio de aplicativo descarregado.

assemblyName não é um assembly válido para o runtime carregado no momento.

Um assembly ou módulo foi carregado duas vezes com duas evidências diferentes.

Exemplos

using System;
using System.IO;
using System.Threading;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.Remoting;

class ADDyno
{
   public static Type CreateADynamicAssembly(ref AppDomain myNewDomain,
                         string executableNameNoExe)
   {
    string executableName = executableNameNoExe + ".exe";

    AssemblyName myAsmName = new AssemblyName();
    myAsmName.Name = executableNameNoExe;
    myAsmName.CodeBase = Environment.CurrentDirectory;

    AssemblyBuilder myAsmBuilder = myNewDomain.DefineDynamicAssembly(myAsmName,
                        AssemblyBuilderAccess.RunAndSave);
    Console.WriteLine("-- Dynamic Assembly instantiated.");

    ModuleBuilder myModBuilder = myAsmBuilder.DefineDynamicModule(executableNameNoExe,
                                      executableName);

    TypeBuilder myTypeBuilder = myModBuilder.DefineType(executableNameNoExe,
                        TypeAttributes.Public,
                        typeof(MarshalByRefObject));

    MethodBuilder myFCMethod = myTypeBuilder.DefineMethod("CountLocalFiles",
                        MethodAttributes.Public |
                        MethodAttributes.Static,
                        null,
                        new Type[] {  });

    MethodInfo currentDirGetMI = typeof(Environment).GetProperty("CurrentDirectory").GetGetMethod();
    MethodInfo writeLine0objMI = typeof(Console).GetMethod("WriteLine",
                     new Type[] { typeof(string) });
    MethodInfo writeLine2objMI = typeof(Console).GetMethod("WriteLine",
                     new Type[] { typeof(string), typeof(object), typeof(object) });
    MethodInfo getFilesMI = typeof(Directory).GetMethod("GetFiles",
                new Type[] { typeof(string) });

    myFCMethod.InitLocals = true;

    ILGenerator myFCIL = myFCMethod.GetILGenerator();

    Console.WriteLine("-- Generating MSIL method body...");
    LocalBuilder v0 = myFCIL.DeclareLocal(typeof(string));
    LocalBuilder v1 = myFCIL.DeclareLocal(typeof(int));
    LocalBuilder v2 = myFCIL.DeclareLocal(typeof(string));
    LocalBuilder v3 = myFCIL.DeclareLocal(typeof(string[]));

    Label evalForEachLabel = myFCIL.DefineLabel();
    Label topOfForEachLabel = myFCIL.DefineLabel();

    // Build the method body.

    myFCIL.EmitCall(OpCodes.Call, currentDirGetMI, null);
    myFCIL.Emit(OpCodes.Stloc_S, v0);
    myFCIL.Emit(OpCodes.Ldc_I4_0);
    myFCIL.Emit(OpCodes.Stloc_S, v1);
    myFCIL.Emit(OpCodes.Ldstr, "---");
    myFCIL.EmitCall(OpCodes.Call, writeLine0objMI, null);
    myFCIL.Emit(OpCodes.Ldloc_S, v0);
    myFCIL.EmitCall(OpCodes.Call, getFilesMI, null);
    myFCIL.Emit(OpCodes.Stloc_S, v3);

    myFCIL.Emit(OpCodes.Br_S, evalForEachLabel);

    // foreach loop starts here.
    myFCIL.MarkLabel(topOfForEachLabel);
    
        // Load array of strings and index, store value at index for output.
    myFCIL.Emit(OpCodes.Ldloc_S, v3);
    myFCIL.Emit(OpCodes.Ldloc_S, v1);
    myFCIL.Emit(OpCodes.Ldelem_Ref);
    myFCIL.Emit(OpCodes.Stloc_S, v2);

    myFCIL.Emit(OpCodes.Ldloc_S, v2);
    myFCIL.EmitCall(OpCodes.Call, writeLine0objMI, null);

    // Increment counter by one.
    myFCIL.Emit(OpCodes.Ldloc_S, v1);
    myFCIL.Emit(OpCodes.Ldc_I4_1);
    myFCIL.Emit(OpCodes.Add);
    myFCIL.Emit(OpCodes.Stloc_S, v1);

    // Determine if end of file list array has been reached.
    myFCIL.MarkLabel(evalForEachLabel);
    myFCIL.Emit(OpCodes.Ldloc_S, v1);
    myFCIL.Emit(OpCodes.Ldloc_S, v3);
    myFCIL.Emit(OpCodes.Ldlen);
    myFCIL.Emit(OpCodes.Conv_I4);
    myFCIL.Emit(OpCodes.Blt_S, topOfForEachLabel);
    //foreach loop end here.

    myFCIL.Emit(OpCodes.Ldstr, "---");
    myFCIL.EmitCall(OpCodes.Call, writeLine0objMI, null);
    myFCIL.Emit(OpCodes.Ldstr, "There are {0} files in {1}.");
    myFCIL.Emit(OpCodes.Ldloc_S, v1);
    myFCIL.Emit(OpCodes.Box, typeof(int));
    myFCIL.Emit(OpCodes.Ldloc_S, v0);
    myFCIL.EmitCall(OpCodes.Call, writeLine2objMI, null);

    myFCIL.Emit(OpCodes.Ret);

    Type myType = myTypeBuilder.CreateType();

    myAsmBuilder.SetEntryPoint(myFCMethod);
    myAsmBuilder.Save(executableName);		
    Console.WriteLine("-- Method generated, type completed, and assembly saved to disk.");

    return myType;
   }

   public static void Main()
   {

    string domainDir, executableName = null;
    
    Console.Write("Enter a name for the file counting assembly: ");
    string executableNameNoExe = Console.ReadLine();
    executableName = executableNameNoExe + ".exe";
    Console.WriteLine("---");

    domainDir = Environment.CurrentDirectory;

    AppDomain curDomain = Thread.GetDomain();	

    // Create a new AppDomain, with the current directory as the base.

    Console.WriteLine("Current Directory: {0}", Environment.CurrentDirectory);
    AppDomainSetup mySetupInfo = new AppDomainSetup();
    mySetupInfo.ApplicationBase = domainDir;
    mySetupInfo.ApplicationName = executableNameNoExe;
    mySetupInfo.LoaderOptimization = LoaderOptimization.SingleDomain;

    AppDomain myDomain = AppDomain.CreateDomain(executableNameNoExe,
                    null, mySetupInfo);

    Console.WriteLine("Creating a new AppDomain '{0}'...",
                    executableNameNoExe);

    Console.WriteLine("-- Base Directory = '{0}'", myDomain.BaseDirectory);
    Console.WriteLine("-- Shadow Copy? = '{0}'", myDomain.ShadowCopyFiles);

    Console.WriteLine("---");
    Type myFCType = CreateADynamicAssembly(ref curDomain,
                     executableNameNoExe);

    Console.WriteLine("Loading '{0}' from '{1}'...", executableName,
              myDomain.BaseDirectory.ToString());

    BindingFlags bFlags = (BindingFlags.Public | BindingFlags.CreateInstance |
                   BindingFlags.Instance);

    Object myObjInstance = myDomain.CreateInstanceAndUnwrap(executableNameNoExe,
                executableNameNoExe, false, bFlags,
                null, null, null, null, null);

    Console.WriteLine("Executing method 'CountLocalFiles' in {0}...",
               myObjInstance.ToString());

    myFCType.InvokeMember("CountLocalFiles", BindingFlags.InvokeMethod, null,
                myObjInstance, new object[] { });
   }
}

Comentários

Este é um método de conveniência que combina CreateInstance e ObjectHandle.Unwrap. Esse método chama o construtor sem parâmetros para typeName.

Consulte AssemblyName para o formato de assemblyName. Consulte a propriedade Type.FullName para o formato de typeName.

Nota

Se você fizer uma chamada antecipada para um método M de um objeto do tipo T1 que foi retornado por CreateInstanceAndUnwrap, e esse método fizer uma chamada de associação inicial a um método de um objeto do tipo T2 em um assembly C diferente do assembly atual ou do assembly que contém T1, o assembly C será carregado no domínio do aplicativo atual. Esse carregamento ocorre mesmo se a chamada de limite inicial para T1.M() foi feita no corpo de uma DynamicMethodou em outro código gerado dinamicamente. Se o domínio atual for o domínio padrão, o assembly C não poderá ser descarregado até que o processo seja encerrado. Se o domínio atual tentar carregar o assembly Cposteriormente, a carga poderá falhar.

Confira também

Aplica-se a

.NET 9 e outras versões
Produto Versões
.NET Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

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

Origem:
AppDomain.cs
Origem:
AppDomain.cs
Origem:
AppDomain.cs

Cria uma nova instância do tipo especificado definido no assembly especificado, especificando se o caso do nome do tipo é ignorado; os atributos de associação e o associador que são usados para selecionar o tipo a ser criado; os argumentos do construtor; a cultura; e os atributos de ativação.

public object? CreateInstanceAndUnwrap (string assemblyName, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, object?[]? args, System.Globalization.CultureInfo? culture, object?[]? activationAttributes);
public object CreateInstanceAndUnwrap (string assemblyName, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes);

Parâmetros

assemblyName
String

O nome de exibição do assembly. Consulte FullName.

typeName
String

O nome totalmente qualificado do tipo solicitado, incluindo o namespace, mas não o assembly, conforme retornado pela propriedade FullName.

ignoreCase
Boolean

Um valor booliano que especifica se uma pesquisa diferencia maiúsculas de minúsculas ou não.

bindingAttr
BindingFlags

Uma combinação de sinalizadores de zero ou mais bits que afetam a pesquisa do construtor typeName. Se bindingAttr for zero, uma pesquisa que diferencia maiúsculas de minúsculas para construtores públicos será realizada.

binder
Binder

Um objeto que permite a associação, a coerção de tipos de argumento, a invocação de membros e a recuperação de objetos MemberInfo usando reflexão. Se binder for nulo, o associador padrão será usado.

args
Object[]

Os argumentos a serem passados para o construtor. Essa matriz de argumentos deve corresponder em número, ordem e digitar os parâmetros do construtor a ser invocado. Se o construtor sem parâmetros for preferencial, args deverá ser uma matriz vazia ou nula.

culture
CultureInfo

Um objeto específico à cultura usado para controlar a coerção de tipos. Se culture for null, o CultureInfo do thread atual será usado.

activationAttributes
Object[]

Uma matriz de um ou mais atributos que podem participar da ativação. Normalmente, uma matriz que contém um único objeto UrlAttribute. que especifica a URL necessária para ativar um objeto remoto.

Esse parâmetro está relacionado a objetos ativados pelo cliente. A ativação do cliente é uma tecnologia herdada que é retida para compatibilidade com versões anteriores, mas não é recomendada para o novo desenvolvimento. Em vez disso, os aplicativos distribuídos devem usar o Windows Communication Foundation.

Retornos

Uma instância do objeto especificada por typeName.

Exceções

assemblyName ou typeName é null.

Nenhum construtor correspondente foi encontrado.

typeName não foi encontrado em assemblyName.

assemblyName não foi encontrado.

O chamador não tem permissão para chamar esse construtor.

O chamador não pode fornecer atributos de ativação para um objeto que não herda de MarshalByRefObject.

A operação é tentada em um domínio de aplicativo descarregado.

assemblyName não é um assembly válido para o runtime carregado no momento.

Um assembly ou módulo foi carregado duas vezes com duas evidências diferentes.

Exemplos

O exemplo a seguir demonstra o uso do parâmetro ignoreCase.

using System;
using System.Reflection;

class IgnoreCaseSnippet {

   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);
      }
   }
}

Comentários

Este é um método de conveniência que combina CreateInstance e ObjectHandle.Unwrap.

Consulte AssemblyName para o formato de assemblyName. Consulte a propriedade Type.FullName para o formato de typeName.

Nota

Se você fizer uma chamada antecipada para um método M de um objeto do tipo T1 que foi retornado por CreateInstanceAndUnwrap, e esse método fizer uma chamada de associação inicial a um método de um objeto do tipo T2 em um assembly C diferente do assembly atual ou do assembly que contém T1, o assembly C será carregado no domínio do aplicativo atual. Esse carregamento ocorre mesmo se a chamada de limite inicial para T1.M() foi feita no corpo de uma DynamicMethodou em outro código gerado dinamicamente. Se o domínio atual for o domínio padrão, o assembly C não poderá ser descarregado até que o processo seja encerrado. Se o domínio atual tentar carregar o assembly Cposteriormente, a carga poderá falhar.

Confira também

Aplica-se a

.NET 9 e outras versões
Produto Versões
.NET Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

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

Cuidado

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.

Cria uma nova instância do tipo especificado. Os parâmetros especificam o nome do tipo e como ele é encontrado e criado.

public object CreateInstanceAndUnwrap (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 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, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes, System.Security.Policy.Evidence securityAttributes);

Parâmetros

assemblyName
String

O nome de exibição do assembly. Consulte FullName.

typeName
String

O nome totalmente qualificado do tipo solicitado, incluindo o namespace, mas não o assembly, conforme retornado pela propriedade FullName.

ignoreCase
Boolean

Um valor booliano que especifica se uma pesquisa diferencia maiúsculas de minúsculas ou não.

bindingAttr
BindingFlags

Uma combinação de sinalizadores de zero ou mais bits que afetam a pesquisa do construtor typeName. Se bindingAttr for zero, uma pesquisa que diferencia maiúsculas de minúsculas para construtores públicos será realizada.

binder
Binder

Um objeto que permite a associação, a coerção de tipos de argumento, a invocação de membros e a recuperação de objetos MemberInfo usando reflexão. Se binder for nulo, o associador padrão será usado.

args
Object[]

Os argumentos a serem passados para o construtor. Essa matriz de argumentos deve corresponder em número, ordem e digitar os parâmetros do construtor a ser invocado. Se o construtor sem parâmetros for preferencial, args deverá ser uma matriz vazia ou nula.

culture
CultureInfo

Um objeto específico à cultura usado para controlar a coerção de tipos. Se culture for null, o CultureInfo do thread atual será usado.

activationAttributes
Object[]

Uma matriz de um ou mais atributos que podem participar da ativação. Normalmente, uma matriz que contém um único objeto UrlAttribute que especifica a URL necessária para ativar um objeto remoto.

Esse parâmetro está relacionado a objetos ativados pelo cliente. A ativação do cliente é uma tecnologia herdada que é retida para compatibilidade com versões anteriores, mas não é recomendada para o novo desenvolvimento. Em vez disso, os aplicativos distribuídos devem usar o Windows Communication Foundation.

securityAttributes
Evidence

Informações usadas para autorizar a criação de typeName.

Retornos

Uma instância do objeto especificada por typeName.

Atributos

Exceções

assemblyName ou typeName é null.

Nenhum construtor correspondente foi encontrado.

typeName não foi encontrado em assemblyName.

assemblyName não foi encontrado.

O chamador não tem permissão para chamar esse construtor.

O chamador não pode fornecer atributos de ativação para um objeto que não herda de MarshalByRefObject.

A operação é tentada em um domínio de aplicativo descarregado.

assemblyName não é um assembly válido para o runtime carregado no momento.

Um assembly ou módulo foi carregado duas vezes com duas evidências diferentes.

Exemplos

O exemplo a seguir demonstra o uso do parâmetro ignoreCase.

using System;
using System.Reflection;

class IgnoreCaseSnippet {

   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);
      }
   }
}

Comentários

Este é um método de conveniência que combina CreateInstance e ObjectHandle.Unwrap.

Consulte AssemblyName para o formato de assemblyName. Consulte a propriedade Type.FullName para o formato de typeName.

Nota

Se você fizer uma chamada antecipada para um método M de um objeto do tipo T1 que foi retornado por CreateInstanceAndUnwrap, e esse método fizer uma chamada de associação inicial a um método de um objeto do tipo T2 em um assembly C diferente do assembly atual ou do assembly que contém T1, o assembly C será carregado no domínio do aplicativo atual. Esse carregamento ocorre mesmo se a chamada de limite inicial para T1.M() foi feita no corpo de uma DynamicMethodou em outro código gerado dinamicamente. Se o domínio atual for o domínio padrão, o assembly C não poderá ser descarregado até que o processo seja encerrado. Se o domínio atual tentar carregar o assembly Cposteriormente, a carga poderá falhar.

Confira também

Aplica-se a

.NET Framework 4.8.1 e outras versões
Produto Versões (Obsoleto)
.NET Framework 1.1, 2.0, 3.0, 3.5 (4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1)