英語で読む

次の方法で共有


AppDomain.CreateInstanceAndUnwrap メソッド

定義

指定した型の新しいインスタンスを作成します。

オーバーロード

CreateInstanceAndUnwrap(String, String)

指定した型の新しいインスタンスを作成します。 パラメーターは、型が定義されているアセンブリと、型の名前を指定します。

CreateInstanceAndUnwrap(String, String, Object[])

指定した型の新しいインスタンスを作成します。 パラメーターは、型が定義されているアセンブリ、型の名前、アクティブ化属性の配列を指定します。

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

指定したアセンブリで定義されている、指定した型の新しいインスタンスを作成し、型名の大文字と小文字を区別するかどうかを指定します。作成する型を選択するために使用されるバインディング属性とバインダー。コンストラクターの引数。文化;およびアクティブ化属性。

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

指定した型の新しいインスタンスを作成します。 パラメーターは、型の名前と、型の検出方法と作成方法を指定します。

CreateInstanceAndUnwrap(String, String)

ソース:
AppDomain.cs
ソース:
AppDomain.cs
ソース:
AppDomain.cs

指定した型の新しいインスタンスを作成します。 パラメーターは、型が定義されているアセンブリと、型の名前を指定します。

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

パラメーター

assemblyName
String

アセンブリの表示名。 FullNameを参照してください。

typeName
String

FullName プロパティによって返される、アセンブリではなく名前空間を含む、要求された型の完全修飾名。

戻り値

typeNameで指定されたオブジェクトのインスタンス。

例外

assemblyName または typeNamenull

一致するパブリック コンストラクターが見つかりませんでした。

typeNameassemblyNameで見つかりませんでした。

assemblyName が見つかりませんでした。

呼び出し元には、このコンストラクターを呼び出すアクセス許可がありません。

アンロードされたアプリケーション ドメインに対して操作が試行されます。

assemblyName は、現在読み込まれているランタイムの有効なアセンブリではありません。

アセンブリまたはモジュールが、2 つの異なる証拠と共に 2 回読み込まれました。

次のコード例は、別のアプリケーション ドメインでコードを実行する最も簡単な方法を示しています。 この例では、MarshalByRefObjectから継承する Worker という名前のクラスを定義します。 Worker クラスは、それが実行されているアプリケーション ドメインの名前を表示するメソッドを定義します。 この例では、既定のアプリケーション ドメインと新しいアプリケーション ドメインに Worker のインスタンスを作成します。

注意

Worker を含むアセンブリは両方のアプリケーション ドメインに読み込む必要がありますが、新しいアプリケーション ドメインにのみ存在する他のアセンブリを読み込むことができます。

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

注釈

これは、CreateInstanceObjectHandle.Unwrapを組み合わせた便利なメソッドです。 このメソッドは、typeNameのパラメーターなしのコンストラクターを呼び出します。

assemblyNameの形式については、AssemblyName を参照してください。 typeNameの形式については、Type.FullName プロパティを参照してください。

注意

CreateInstanceAndUnwrapによって返された T1 型のオブジェクトの M メソッドの早期バインド呼び出しを行い、そのメソッドが、現在のアセンブリまたは T1を含むアセンブリ以外のアセンブリ CT2 型のオブジェクトのメソッドに対して早期バインド呼び出しを行うと、アセンブリ C が現在のアプリケーション ドメインに読み込まれます。 この読み込みは、DynamicMethodの本体または他の動的に生成されたコードで、T1.M() への早期バインド呼び出しが行われた場合でも発生します。 現在のドメインが既定のドメインの場合、アセンブリ C はプロセスが終了するまでアンロードできません。 現在のドメインが後でアセンブリ Cを読み込もうとすると、読み込みが失敗する可能性があります。

こちらもご覧ください

適用対象

.NET 9 およびその他のバージョン
製品 バージョン
.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[])

ソース:
AppDomain.cs
ソース:
AppDomain.cs
ソース:
AppDomain.cs

指定した型の新しいインスタンスを作成します。 パラメーターは、型が定義されているアセンブリ、型の名前、アクティブ化属性の配列を指定します。

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

パラメーター

assemblyName
String

アセンブリの表示名。 FullNameを参照してください。

typeName
String

FullName プロパティによって返される、アセンブリではなく名前空間を含む、要求された型の完全修飾名。

activationAttributes
Object[]

アクティブ化に参加できる 1 つ以上の属性の配列。 通常、リモート オブジェクトのアクティブ化に必要な URL を指定する単一の UrlAttribute オブジェクトを含む配列。

このパラメーターは、クライアントによってアクティブ化されたオブジェクトに関連しています。クライアントのアクティブ化は、旧バージョンとの互換性のために保持されるレガシ テクノロジですが、新しい開発には推奨されません。 分散アプリケーションでは、代わりに Windows Communication Foundation を使用する必要があります。

戻り値

typeNameで指定されたオブジェクトのインスタンス。

例外

assemblyName または typeNamenull

一致するパブリック コンストラクターが見つかりませんでした。

typeNameassemblyNameで見つかりませんでした。

assemblyName が見つかりませんでした。

呼び出し元には、このコンストラクターを呼び出すアクセス許可がありません。

呼び出し元は、MarshalByRefObjectから継承しないオブジェクトのアクティブ化属性を指定できません。

アンロードされたアプリケーション ドメインに対して操作が試行されます。

assemblyName は、現在読み込まれているランタイムの有効なアセンブリではありません。

アセンブリまたはモジュールが、2 つの異なる証拠と共に 2 回読み込まれました。

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

注釈

これは、CreateInstanceObjectHandle.Unwrapを組み合わせた便利なメソッドです。 このメソッドは、typeNameのパラメーターなしのコンストラクターを呼び出します。

assemblyNameの形式については、AssemblyName を参照してください。 typeNameの形式については、Type.FullName プロパティを参照してください。

注意

CreateInstanceAndUnwrapによって返された T1 型のオブジェクトの M メソッドの早期バインド呼び出しを行い、そのメソッドが、現在のアセンブリまたは T1を含むアセンブリ以外のアセンブリ CT2 型のオブジェクトのメソッドに対して早期バインド呼び出しを行うと、アセンブリ C が現在のアプリケーション ドメインに読み込まれます。 この読み込みは、DynamicMethodの本体または他の動的に生成されたコードで、T1.M() への早期バインド呼び出しが行われた場合でも発生します。 現在のドメインが既定のドメインの場合、アセンブリ C はプロセスが終了するまでアンロードできません。 現在のドメインが後でアセンブリ Cを読み込もうとすると、読み込みが失敗する可能性があります。

こちらもご覧ください

適用対象

.NET 9 およびその他のバージョン
製品 バージョン
.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[])

ソース:
AppDomain.cs
ソース:
AppDomain.cs
ソース:
AppDomain.cs

指定したアセンブリで定義されている、指定した型の新しいインスタンスを作成し、型名の大文字と小文字を区別するかどうかを指定します。作成する型を選択するために使用されるバインディング属性とバインダー。コンストラクターの引数。文化;およびアクティブ化属性。

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

パラメーター

assemblyName
String

アセンブリの表示名。 FullNameを参照してください。

typeName
String

FullName プロパティによって返される、アセンブリではなく名前空間を含む、要求された型の完全修飾名。

ignoreCase
Boolean

大文字と小文字を区別する検索を実行するかどうかを指定するブール値。

bindingAttr
BindingFlags

typeName コンストラクターの検索に影響する 0 個以上のビット フラグの組み合わせ。 bindingAttr が 0 の場合、パブリック コンストラクターの大文字と小文字が区別される検索が実行されます。

binder
Binder

バインディング、引数型の強制変換、メンバーの呼び出し、リフレクションを使用した MemberInfo オブジェクトの取得を可能にするオブジェクト。 binder が null の場合、既定のバインダーが使用されます。

args
Object[]

コンストラクターに渡す引数。 この引数の配列は、呼び出すコンストラクターのパラメーターを数値、順序、および型で一致させる必要があります。 パラメーターなしのコンストラクターが優先される場合、args は空の配列または null である必要があります。

culture
CultureInfo

型の強制型の制御に使用されるカルチャ固有のオブジェクト。 culturenullされている場合は、現在のスレッドの CultureInfo が使用されます。

activationAttributes
Object[]

アクティブ化に参加できる 1 つ以上の属性の配列。 通常、1 つの UrlAttribute オブジェクトを含む配列。 リモート オブジェクトのアクティブ化に必要な URL を指定します。

このパラメーターは、クライアントによってアクティブ化されたオブジェクトに関連しています。 クライアントのアクティブ化は、旧バージョンとの互換性のために保持されるレガシ テクノロジですが、新しい開発には推奨されません。 分散アプリケーションでは、代わりに Windows Communication Foundation を使用する必要があります。

戻り値

typeNameで指定されたオブジェクトのインスタンス。

例外

assemblyName または typeNamenull

一致するコンストラクターが見つかりませんでした。

typeNameassemblyNameで見つかりませんでした。

assemblyName が見つかりませんでした。

呼び出し元には、このコンストラクターを呼び出すアクセス許可がありません。

呼び出し元は、MarshalByRefObjectから継承しないオブジェクトのアクティブ化属性を指定できません。

アンロードされたアプリケーション ドメインに対して操作が試行されます。

assemblyName は、現在読み込まれているランタイムの有効なアセンブリではありません。

アセンブリまたはモジュールが、2 つの異なる証拠と共に 2 回読み込まれました。

次の例では、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);
      }
   }
}

注釈

これは、CreateInstanceObjectHandle.Unwrapを組み合わせた便利なメソッドです。

assemblyNameの形式については、AssemblyName を参照してください。 typeNameの形式については、Type.FullName プロパティを参照してください。

注意

CreateInstanceAndUnwrapによって返された T1 型のオブジェクトの M メソッドの早期バインド呼び出しを行い、そのメソッドが、現在のアセンブリまたは T1を含むアセンブリ以外のアセンブリ CT2 型のオブジェクトのメソッドに対して早期バインド呼び出しを行うと、アセンブリ C が現在のアプリケーション ドメインに読み込まれます。 この読み込みは、DynamicMethodの本体または他の動的に生成されたコードで、T1.M() への早期バインド呼び出しが行われた場合でも発生します。 現在のドメインが既定のドメインの場合、アセンブリ C はプロセスが終了するまでアンロードできません。 現在のドメインが後でアセンブリ Cを読み込もうとすると、読み込みが失敗する可能性があります。

こちらもご覧ください

適用対象

.NET 9 およびその他のバージョン
製品 バージョン
.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)

注意事項

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.

指定した型の新しいインスタンスを作成します。 パラメーターは、型の名前と、型の検出方法と作成方法を指定します。

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

パラメーター

assemblyName
String

アセンブリの表示名。 FullNameを参照してください。

typeName
String

FullName プロパティによって返される、アセンブリではなく名前空間を含む、要求された型の完全修飾名。

ignoreCase
Boolean

大文字と小文字を区別する検索を実行するかどうかを指定するブール値。

bindingAttr
BindingFlags

typeName コンストラクターの検索に影響する 0 個以上のビット フラグの組み合わせ。 bindingAttr が 0 の場合、パブリック コンストラクターの大文字と小文字が区別される検索が実行されます。

binder
Binder

バインディング、引数型の強制変換、メンバーの呼び出し、リフレクションを使用した MemberInfo オブジェクトの取得を可能にするオブジェクト。 binder が null の場合、既定のバインダーが使用されます。

args
Object[]

コンストラクターに渡す引数。 この引数の配列は、呼び出すコンストラクターのパラメーターを数値、順序、および型で一致させる必要があります。 パラメーターなしのコンストラクターが優先される場合、args は空の配列または null である必要があります。

culture
CultureInfo

型の強制型の制御に使用されるカルチャ固有のオブジェクト。 culturenullされている場合は、現在のスレッドの CultureInfo が使用されます。

activationAttributes
Object[]

アクティブ化に参加できる 1 つ以上の属性の配列。 通常、リモート オブジェクトのアクティブ化に必要な URL を指定する単一の UrlAttribute オブジェクトを含む配列。

このパラメーターは、クライアントによってアクティブ化されたオブジェクトに関連しています。 クライアントのアクティブ化は、旧バージョンとの互換性のために保持されるレガシ テクノロジですが、新しい開発には推奨されません。 分散アプリケーションでは、代わりに Windows Communication Foundation を使用する必要があります。

securityAttributes
Evidence

typeNameの作成を承認するために使用される情報。

戻り値

typeNameで指定されたオブジェクトのインスタンス。

属性

例外

assemblyName または typeNamenull

一致するコンストラクターが見つかりませんでした。

typeNameassemblyNameで見つかりませんでした。

assemblyName が見つかりませんでした。

呼び出し元には、このコンストラクターを呼び出すアクセス許可がありません。

呼び出し元は、MarshalByRefObjectから継承しないオブジェクトのアクティブ化属性を指定できません。

アンロードされたアプリケーション ドメインに対して操作が試行されます。

assemblyName は、現在読み込まれているランタイムの有効なアセンブリではありません。

アセンブリまたはモジュールが、2 つの異なる証拠と共に 2 回読み込まれました。

次の例では、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);
      }
   }
}

注釈

これは、CreateInstanceObjectHandle.Unwrapを組み合わせた便利なメソッドです。

assemblyNameの形式については、AssemblyName を参照してください。 typeNameの形式については、Type.FullName プロパティを参照してください。

注意

CreateInstanceAndUnwrapによって返された T1 型のオブジェクトの M メソッドの早期バインド呼び出しを行い、そのメソッドが、現在のアセンブリまたは T1を含むアセンブリ以外のアセンブリ CT2 型のオブジェクトのメソッドに対して早期バインド呼び出しを行うと、アセンブリ C が現在のアプリケーション ドメインに読み込まれます。 この読み込みは、DynamicMethodの本体または他の動的に生成されたコードで、T1.M() への早期バインド呼び出しが行われた場合でも発生します。 現在のドメインが既定のドメインの場合、アセンブリ C はプロセスが終了するまでアンロードできません。 現在のドメインが後でアセンブリ Cを読み込もうとすると、読み込みが失敗する可能性があります。

こちらもご覧ください

適用対象

.NET Framework 4.8.1 およびその他のバージョン
製品 バージョン (廃止)
.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)