AppDomain.CreateInstanceAndUnwrap Metoda

Definicja

Tworzy nowe wystąpienie określonego typu.

Przeciążenia

CreateInstanceAndUnwrap(String, String)

Tworzy nowe wystąpienie określonego typu. Parametry określają zestaw, w którym jest zdefiniowany typ, oraz nazwę typu.

CreateInstanceAndUnwrap(String, String, Object[])

Tworzy nowe wystąpienie określonego typu. Parametry określają zestaw, w którym zdefiniowano typ, nazwę typu i tablicę atrybutów aktywacji.

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

Tworzy nowe wystąpienie określonego typu zdefiniowanego w określonym zestawie, określając, czy wielkość liter nazwy typu jest ignorowana; atrybuty powiązania i powiązanie, które są używane do wybierania typu do utworzenia; argumenty konstruktora; kultury; oraz atrybuty aktywacji.

CreateInstanceAndUnwrap(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[], Evidence)
Przestarzałe.

Tworzy nowe wystąpienie określonego typu. Parametry określają nazwę typu oraz sposób jego znajdowania i tworzenia.

CreateInstanceAndUnwrap(String, String)

Źródło:
AppDomain.cs
Źródło:
AppDomain.cs
Źródło:
AppDomain.cs

Tworzy nowe wystąpienie określonego typu. Parametry określają zestaw, w którym jest zdefiniowany typ, oraz nazwę typu.

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

Parametry

assemblyName
String

Nazwa wyświetlana zestawu. Zobacz FullName.

typeName
String

W pełni kwalifikowana nazwa żądanego typu, w tym przestrzeń nazw, ale nie zestaw, zwracana przez właściwość FullName.

Zwraca

Wystąpienie obiektu określone przez typeName.

Wyjątki

assemblyName lub typeName jest null.

Nie znaleziono pasującego publicznego konstruktora.

nie można odnaleźć typeName w assemblyName.

nie można odnaleźć assemblyName.

Obiekt wywołujący nie ma uprawnień do wywoływania tego konstruktora.

Operacja jest podejmowana w domenie aplikacji, która została zwolniona.

assemblyName nie jest prawidłowym zestawem dla aktualnie załadowanego środowiska uruchomieniowego.

Zestaw lub moduł został załadowany dwukrotnie z dwoma różnymi dowodami.

Przykłady

Poniższy przykład kodu przedstawia najprostszy sposób wykonywania kodu w innej domenie aplikacji. W przykładzie zdefiniowano klasę o nazwie Worker, która dziedziczy z MarshalByRefObject. Klasa Worker definiuje metodę, która wyświetla nazwę domeny aplikacji, w której jest wykonywane. W przykładzie tworzone są wystąpienia Worker w domyślnej domenie aplikacji i w nowej domenie aplikacji.

Uwaga

Zestaw zawierający Worker musi zostać załadowany do obu domen aplikacji, ale może załadować inne zestawy, które istnieją tylko w nowej domenie aplikacji.

C#
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"
 */

Uwagi

Jest to metoda wygody, która łączy CreateInstance i ObjectHandle.Unwrap. Ta metoda wywołuje konstruktor bez parametrów dla typeName.

Aby uzyskać format assemblyName, zobacz AssemblyName . Zobacz właściwość Type.FullName, aby uzyskać format typeName.

Uwaga

Jeśli wykonasz wczesne wywołanie metody M obiektu typu T1, które zostało zwrócone przez CreateInstanceAndUnwrap, i ta metoda wykonuje wczesne wywołanie obiektu typu T2 w zestawie C innym niż bieżący zestaw lub zestaw zawierający T1, zestaw C jest ładowany do bieżącej domeny aplikacji. To ładowanie odbywa się nawet wtedy, gdy wczesne wywołanie T1.M() zostało wykonane w treści DynamicMethodlub w innym dynamicznie generowanym kodzie. Jeśli bieżąca domena jest domeną domyślną, nie można zwolnić C zestawu do momentu zakończenia procesu. Jeśli bieżąca domena później spróbuje załadować zestaw C, obciążenie może zakończyć się niepowodzeniem.

Zobacz też

Dotyczy

.NET 9 i inne wersje
Produkt Wersje
.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[])

Źródło:
AppDomain.cs
Źródło:
AppDomain.cs
Źródło:
AppDomain.cs

Tworzy nowe wystąpienie określonego typu. Parametry określają zestaw, w którym zdefiniowano typ, nazwę typu i tablicę atrybutów aktywacji.

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

Parametry

assemblyName
String

Nazwa wyświetlana zestawu. Zobacz FullName.

typeName
String

W pełni kwalifikowana nazwa żądanego typu, w tym przestrzeń nazw, ale nie zestaw, zwracana przez właściwość FullName.

activationAttributes
Object[]

Tablica co najmniej jednego atrybutu, który może uczestniczyć w aktywacji. Zazwyczaj tablica zawierająca pojedynczy obiekt UrlAttribute określający adres URL wymagany do aktywowania obiektu zdalnego.

Ten parametr jest związany z obiektami aktywowanymi przez klienta. Aktywacja klienta to starsza technologia, która jest zachowywana w celu zapewnienia zgodności z poprzednimi wersjami, ale nie jest zalecana w przypadku nowego programowania. Aplikacje rozproszone powinny zamiast tego używać programu Windows Communication Foundation.

Zwraca

Wystąpienie obiektu określone przez typeName.

Wyjątki

assemblyName lub typeName jest null.

Nie znaleziono pasującego publicznego konstruktora.

nie można odnaleźć typeName w assemblyName.

nie można odnaleźć assemblyName.

Obiekt wywołujący nie ma uprawnień do wywoływania tego konstruktora.

Obiekt wywołujący nie może podać atrybutów aktywacji dla obiektu, który nie dziedziczy z MarshalByRefObject.

Operacja jest podejmowana w domenie aplikacji, która została zwolniona.

assemblyName nie jest prawidłowym zestawem dla aktualnie załadowanego środowiska uruchomieniowego.

Zestaw lub moduł został załadowany dwukrotnie z dwoma różnymi dowodami.

Przykłady

C#
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[] { });
   }
}

Uwagi

Jest to metoda wygody, która łączy CreateInstance i ObjectHandle.Unwrap. Ta metoda wywołuje konstruktor bez parametrów dla typeName.

Aby uzyskać format assemblyName, zobacz AssemblyName . Zobacz właściwość Type.FullName, aby uzyskać format typeName.

Uwaga

Jeśli wykonasz wczesne wywołanie metody M obiektu typu T1, które zostało zwrócone przez CreateInstanceAndUnwrap, i ta metoda wykonuje wczesne wywołanie obiektu typu T2 w zestawie C innym niż bieżący zestaw lub zestaw zawierający T1, zestaw C jest ładowany do bieżącej domeny aplikacji. To ładowanie odbywa się nawet wtedy, gdy wczesne wywołanie T1.M() zostało wykonane w treści DynamicMethodlub w innym dynamicznie generowanym kodzie. Jeśli bieżąca domena jest domeną domyślną, nie można zwolnić C zestawu do momentu zakończenia procesu. Jeśli bieżąca domena później spróbuje załadować zestaw C, obciążenie może zakończyć się niepowodzeniem.

Zobacz też

Dotyczy

.NET 9 i inne wersje
Produkt Wersje
.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[])

Źródło:
AppDomain.cs
Źródło:
AppDomain.cs
Źródło:
AppDomain.cs

Tworzy nowe wystąpienie określonego typu zdefiniowanego w określonym zestawie, określając, czy wielkość liter nazwy typu jest ignorowana; atrybuty powiązania i powiązanie, które są używane do wybierania typu do utworzenia; argumenty konstruktora; kultury; oraz atrybuty aktywacji.

C#
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);
C#
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);

Parametry

assemblyName
String

Nazwa wyświetlana zestawu. Zobacz FullName.

typeName
String

W pełni kwalifikowana nazwa żądanego typu, w tym przestrzeń nazw, ale nie zestaw, zwracana przez właściwość FullName.

ignoreCase
Boolean

Wartość logiczna określająca, czy ma być wykonywane wyszukiwanie z uwzględnieniem wielkości liter.

bindingAttr
BindingFlags

Kombinacja flag zero lub więcej bitów, które wpływają na wyszukiwanie konstruktora typeName. Jeśli bindingAttr wynosi zero, przeprowadzane jest wyszukiwanie konstruktorów publicznych z uwzględnieniem wielkości liter.

binder
Binder

Obiekt, który umożliwia powiązanie, przymus typów argumentów, wywołanie elementów członkowskich i pobieranie obiektów MemberInfo przy użyciu odbicia. Jeśli binder ma wartość null, zostanie użyty domyślny binder.

args
Object[]

Argumenty, które mają być przekazywane do konstruktora. Ta tablica argumentów musi być zgodna z liczbą, kolejnością i typem parametrów konstruktora do wywołania. Jeśli preferowany jest konstruktor bez parametrów, args musi być pustą tablicą lub wartością null.

culture
CultureInfo

Obiekt specyficzny dla kultury służący do nadzorowania przymusu typów. Jeśli culture jest null, zostanie użyta CultureInfo dla bieżącego wątku.

activationAttributes
Object[]

Tablica co najmniej jednego atrybutu, który może uczestniczyć w aktywacji. Zazwyczaj tablica zawierająca pojedynczy obiekt UrlAttribute. określa adres URL wymagany do aktywowania obiektu zdalnego.

Ten parametr jest związany z obiektami aktywowanymi przez klienta. Aktywacja klienta to starsza technologia, która jest zachowywana w celu zapewnienia zgodności z poprzednimi wersjami, ale nie jest zalecana w przypadku nowego programowania. Aplikacje rozproszone powinny zamiast tego używać programu Windows Communication Foundation.

Zwraca

Wystąpienie obiektu określone przez typeName.

Wyjątki

assemblyName lub typeName jest null.

Nie znaleziono pasującego konstruktora.

nie można odnaleźć typeName w assemblyName.

nie można odnaleźć assemblyName.

Obiekt wywołujący nie ma uprawnień do wywoływania tego konstruktora.

Obiekt wywołujący nie może podać atrybutów aktywacji dla obiektu, który nie dziedziczy z MarshalByRefObject.

Operacja jest podejmowana w domenie aplikacji, która została zwolniona.

assemblyName nie jest prawidłowym zestawem dla aktualnie załadowanego środowiska uruchomieniowego.

Zestaw lub moduł został załadowany dwukrotnie z dwoma różnymi dowodami.

Przykłady

W poniższym przykładzie pokazano użycie parametru ignoreCase.

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

Uwagi

Jest to metoda wygody, która łączy CreateInstance i ObjectHandle.Unwrap.

Aby uzyskać format assemblyName, zobacz AssemblyName . Zobacz właściwość Type.FullName, aby uzyskać format typeName.

Uwaga

Jeśli wykonasz wczesne wywołanie metody M obiektu typu T1, które zostało zwrócone przez CreateInstanceAndUnwrap, i ta metoda wykonuje wczesne wywołanie obiektu typu T2 w zestawie C innym niż bieżący zestaw lub zestaw zawierający T1, zestaw C jest ładowany do bieżącej domeny aplikacji. To ładowanie odbywa się nawet wtedy, gdy wczesne wywołanie T1.M() zostało wykonane w treści DynamicMethodlub w innym dynamicznie generowanym kodzie. Jeśli bieżąca domena jest domeną domyślną, nie można zwolnić C zestawu do momentu zakończenia procesu. Jeśli bieżąca domena później spróbuje załadować zestaw C, obciążenie może zakończyć się niepowodzeniem.

Zobacz też

Dotyczy

.NET 9 i inne wersje
Produkt Wersje
.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)

Przestroga

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.

Tworzy nowe wystąpienie określonego typu. Parametry określają nazwę typu oraz sposób jego znajdowania i tworzenia.

C#
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);
C#
[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);

Parametry

assemblyName
String

Nazwa wyświetlana zestawu. Zobacz FullName.

typeName
String

W pełni kwalifikowana nazwa żądanego typu, w tym przestrzeń nazw, ale nie zestaw, zwracana przez właściwość FullName.

ignoreCase
Boolean

Wartość logiczna określająca, czy ma być wykonywane wyszukiwanie z uwzględnieniem wielkości liter.

bindingAttr
BindingFlags

Kombinacja flag zero lub więcej bitów, które wpływają na wyszukiwanie konstruktora typeName. Jeśli bindingAttr wynosi zero, przeprowadzane jest wyszukiwanie konstruktorów publicznych z uwzględnieniem wielkości liter.

binder
Binder

Obiekt, który umożliwia powiązanie, przymus typów argumentów, wywołanie elementów członkowskich i pobieranie obiektów MemberInfo przy użyciu odbicia. Jeśli binder ma wartość null, zostanie użyty domyślny binder.

args
Object[]

Argumenty, które mają być przekazywane do konstruktora. Ta tablica argumentów musi być zgodna z liczbą, kolejnością i typem parametrów konstruktora do wywołania. Jeśli preferowany jest konstruktor bez parametrów, args musi być pustą tablicą lub wartością null.

culture
CultureInfo

Obiekt specyficzny dla kultury służący do nadzorowania przymusu typów. Jeśli culture jest null, zostanie użyta CultureInfo dla bieżącego wątku.

activationAttributes
Object[]

Tablica co najmniej jednego atrybutu, który może uczestniczyć w aktywacji. Zazwyczaj tablica zawierająca pojedynczy obiekt UrlAttribute określający adres URL wymagany do aktywowania obiektu zdalnego.

Ten parametr jest związany z obiektami aktywowanymi przez klienta. Aktywacja klienta to starsza technologia, która jest zachowywana w celu zapewnienia zgodności z poprzednimi wersjami, ale nie jest zalecana w przypadku nowego programowania. Aplikacje rozproszone powinny zamiast tego używać programu Windows Communication Foundation.

securityAttributes
Evidence

Informacje używane do autoryzowania tworzenia typeName.

Zwraca

Wystąpienie obiektu określone przez typeName.

Atrybuty

Wyjątki

assemblyName lub typeName jest null.

Nie znaleziono pasującego konstruktora.

nie można odnaleźć typeName w assemblyName.

nie można odnaleźć assemblyName.

Obiekt wywołujący nie ma uprawnień do wywoływania tego konstruktora.

Obiekt wywołujący nie może podać atrybutów aktywacji dla obiektu, który nie dziedziczy z MarshalByRefObject.

Operacja jest podejmowana w domenie aplikacji, która została zwolniona.

assemblyName nie jest prawidłowym zestawem dla aktualnie załadowanego środowiska uruchomieniowego.

Zestaw lub moduł został załadowany dwukrotnie z dwoma różnymi dowodami.

Przykłady

W poniższym przykładzie pokazano użycie parametru ignoreCase.

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

Uwagi

Jest to metoda wygody, która łączy CreateInstance i ObjectHandle.Unwrap.

Aby uzyskać format assemblyName, zobacz AssemblyName . Zobacz właściwość Type.FullName, aby uzyskać format typeName.

Uwaga

Jeśli wykonasz wczesne wywołanie metody M obiektu typu T1, które zostało zwrócone przez CreateInstanceAndUnwrap, i ta metoda wykonuje wczesne wywołanie obiektu typu T2 w zestawie C innym niż bieżący zestaw lub zestaw zawierający T1, zestaw C jest ładowany do bieżącej domeny aplikacji. To ładowanie odbywa się nawet wtedy, gdy wczesne wywołanie T1.M() zostało wykonane w treści DynamicMethodlub w innym dynamicznie generowanym kodzie. Jeśli bieżąca domena jest domeną domyślną, nie można zwolnić C zestawu do momentu zakończenia procesu. Jeśli bieżąca domena później spróbuje załadować zestaw C, obciążenie może zakończyć się niepowodzeniem.

Zobacz też

Dotyczy

.NET Framework 4.8.1 i inne wersje
Produkt Wersje (Przestarzałe)
.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)