次の方法で共有


AppDomain.CreateInstanceAndUnwrap メソッド (String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object , Evidence)

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

Overloads Public Function CreateInstanceAndUnwrap( _
   ByVal assemblyName As String, _   ByVal typeName As String, _   ByVal ignoreCase As Boolean, _   ByVal bindingAttr As BindingFlags, _   ByVal binder As Binder, _   ByVal args() As Object, _   ByVal culture As CultureInfo, _   ByVal activationAttributes() As Object, _   ByVal securityAttributes As Evidence _) As Object
[C#]
public object CreateInstanceAndUnwrap(stringassemblyName,stringtypeName,boolignoreCase,BindingFlagsbindingAttr,Binderbinder,object[] args,CultureInfoculture,object[] activationAttributes,EvidencesecurityAttributes);
[C++]
public: Object* CreateInstanceAndUnwrap(String* assemblyName,String* typeName,boolignoreCase,BindingFlagsbindingAttr,Binder* binder,Object* args __gc[],CultureInfo* culture,Object* activationAttributes __gc[],Evidence* securityAttributes);
[JScript]
public function CreateInstanceAndUnwrap(
   assemblyName : String,typeName : String,ignoreCase : Boolean,bindingAttr : BindingFlags,binder : Binder,args : Object[],culture : CultureInfo,activationAttributes : Object[],securityAttributes : Evidence) : Object;

パラメータ

  • assemblyName
    アセンブリの表示名。
  • typeName
    要求する型の完全限定型名。
  • ignoreCase
    検索で大文字と小文字を区別するかどうかを指定する Boolean 値。
  • bindingAttr
    typeName コンストラクタの検索に影響を与える 0 個以上のビット フラグの組み合わせ。 bindingAttr が 0 の場合は、大文字と小文字を区別してパブリック コンストラクタを検索します。
  • binder
    バインディング、引数型の強制変換、メンバの呼び出し、および、リフレクションを使用した MemberInfo オブジェクトの取得を有効にするオブジェクト。 binder が null の場合は、既定のバインダが使用されます。
  • args
    コンストラクタに渡される引数。この引数の配列は、呼び出すコンストラクタのパラメータに対して、数、順序、および型を一致させる必要があります。既定のコンストラクタを優先する場合は、 args を空の配列または null にする必要があります。
  • culture
    型の強制変換を制御するために使用するカルチャ固有のオブジェクト。 culture が null 参照 (Visual Basic では Nothing) の場合は、現在のスレッドの CultureInfo が使用されます。
  • activationAttributes
    アクティべーションに参加できる 1 つ以上の属性の配列。
  • securityAttributes
    typeName の作成を認証するために使用される情報。

戻り値

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

例外

例外の種類 条件
ArgumentNullException assemblyName または typeName が null 参照 (Visual Basic では Nothing) です。
MissingMethodException 一致するコンストラクタが見つかりませんでした。
TypeLoadException assemblyName で、 typename が見つかりませんでした。
FileNotFoundException assemblyName が見つかりませんでした。
MethodAccessException 呼び出し元に、このコンストラクタを呼び出すためのアクセス許可がありません。
NotSupportedException MarshalByRefObject から継承されていないオブジェクトに対して、呼び出し元がアクティベーション属性を与えることはできません。
SecurityException 呼び出し元に、正しいアクセス許可がありません。要件のセクションを参照してください。
AppDomainUnloadedException 操作が、アンロードされたアプリケーション ドメインで試行されています。

解説

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

assemblyName の書式については、 AssemblyName のトピックを参照してください。

使用例

[Visual Basic, C#, C++] ignoreCase パラメータの使用方法を次の例に示します。

 
Imports System
Imports System.Reflection

Module Test

   Sub Main()
      InstantiateINT32(False)    ' Failed!
      InstantiateINT32(True)    ' OK!
   End Sub 'Main

   Sub InstantiateINT32(ignoreCase As Boolean)
      Try
         Dim currentDomain As AppDomain = AppDomain.CurrentDomain
         Dim instance As Object = currentDomain.CreateInstanceAndUnwrap( _
            "mscorlib", _
            "SYSTEM.INT32", _
            ignoreCase, _
            BindingFlags.Default, _
            Nothing, _
            Nothing, _
            Nothing, _
            Nothing, _
            Nothing  _
         )
         Console.WriteLine(instance.GetType())
      Catch e As TypeLoadException
         Console.WriteLine(e.Message)
      End Try
   End Sub 'InstantiateINT32

End Module 'Test

[C#] 
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",
            "SYSTEM.INT32",
            ignoreCase,
            BindingFlags.Default,
            null,
            null,
            null,
            null,
            null
         );
         Console.WriteLine(instance.GetType());
      } catch (TypeLoadException e) {
         Console.WriteLine(e.Message);
      }
   }
}

[C++] 
#using <mscorlib.dll>

using namespace System;
using namespace System::Reflection;

static void InstantiateINT32(bool ignoreCase) {
   try {
      AppDomain*  currentDomain = AppDomain::CurrentDomain;
      Object* instance = currentDomain->CreateInstanceAndUnwrap(S"mscorlib",
         S"SYSTEM.INT32",
         ignoreCase,
         BindingFlags::Default,
         0,
         0,
         0,
         0,
         0);
      Console::WriteLine(instance->GetType());
   } catch (TypeLoadException* e) {
      Console::WriteLine(e->Message);
   }
}

int main() {
   InstantiateINT32(false);     // Failed!
   InstantiateINT32(true);      // OK!
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

.NET Framework セキュリティ:

  • FileIOPermissionAccess (アセンブリの場所にアクセスするために必要なアクセス許可)PathDiscovery (関連する列挙体)
  • FileIOPermissionAccess (アセンブリ マニフェストを格納しているファイルを読み取るために必要なアクセス許可)Read (関連する列挙体)
  • WebPermission (アセンブリがローカルでない場合にアセンブリの場所にアクセスするために必要なアクセス許可)
  • SecurityPermission (デリゲートのインスタンスの作成時にアンマネージ コードを呼び出すために必要なアクセス許可)SecurityPermissionFlag/UnmanagedCode (関連する列挙体)
  • SecurityPermission (証拠が指定されたアセンブリを読み込むために必要なアクセス許可) SecurityPermissionFlag.ControlEvidence (関連する列挙体)
  • ReflectionPermission (すべての型のメンバに対して操作を呼び出すために必要なアクセス許可)ReflectionPermissionFlag/MemberAccess (関連する列挙体)
  • ReflectionPermission (Type.InvokeMember などの機構を通じて遅延バインディングが呼び出されるときに必要なアクセス許可) ReflectionPermissionFlag.MemberAccess (関連する列挙体)

参照

AppDomain クラス | AppDomain メンバ | System 名前空間 | AppDomain.CreateInstanceAndUnwrap オーバーロードの一覧 | CreateInstance