次の方法で共有


AppDomain.CreateInstanceFrom メソッド

定義

指定したアセンブリ ファイルで定義されている、指定した型の新しいインスタンスを作成します。

オーバーロード

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

指定したアセンブリ ファイルで定義されている、指定した型の新しいインスタンスを作成します。

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

指定したアセンブリ ファイルで定義されている、指定した型の新しいインスタンスを作成します。

CreateInstanceFrom(String, String, Object[])

指定したアセンブリ ファイルで定義されている、指定した型の新しいインスタンスを作成します。

CreateInstanceFrom(String, String)

指定したアセンブリ ファイルで定義されている、指定した型の新しいインスタンスを作成します。

CreateInstanceFrom(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 CreateInstanceFrom which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.

指定したアセンブリ ファイルで定義されている、指定した型の新しいインスタンスを作成します。

public:
 virtual System::Runtime::Remoting::ObjectHandle ^ CreateInstanceFrom(System::String ^ assemblyFile, System::String ^ typeName, bool ignoreCase, System::Reflection::BindingFlags bindingAttr, System::Reflection::Binder ^ binder, cli::array <System::Object ^> ^ args, System::Globalization::CultureInfo ^ culture, cli::array <System::Object ^> ^ activationAttributes, System::Security::Policy::Evidence ^ securityAttributes);
public System.Runtime.Remoting.ObjectHandle CreateInstanceFrom (string assemblyFile, 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 CreateInstanceFrom which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public System.Runtime.Remoting.ObjectHandle CreateInstanceFrom (string assemblyFile, 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);
abstract member CreateInstanceFrom : string * string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] * System.Security.Policy.Evidence -> System.Runtime.Remoting.ObjectHandle
override this.CreateInstanceFrom : string * string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] * System.Security.Policy.Evidence -> System.Runtime.Remoting.ObjectHandle
[<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 CreateInstanceFrom which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
abstract member CreateInstanceFrom : string * string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] * System.Security.Policy.Evidence -> System.Runtime.Remoting.ObjectHandle
override this.CreateInstanceFrom : string * string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] * System.Security.Policy.Evidence -> System.Runtime.Remoting.ObjectHandle
Public Function CreateInstanceFrom (assemblyFile As String, typeName As String, ignoreCase As Boolean, bindingAttr As BindingFlags, binder As Binder, args As Object(), culture As CultureInfo, activationAttributes As Object(), securityAttributes As Evidence) As ObjectHandle

パラメーター

assemblyFile
String

要求する型を定義しているアセンブリが格納されているファイルの名前 (パスを含む)。 アセンブリは LoadFrom(String) メソッドを使用して読み込まれます。

typeName
String

要求する型の完全修飾名。アセンブリは指定せずに、名前空間だけを指定します。この名前は、FullName プロパティによって返されます。

ignoreCase
Boolean

検索で大文字と小文字を区別するかどうかを指定する Boolean 値。

bindingAttr
BindingFlags

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

binder
Binder

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

args
Object[]

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

culture
CultureInfo

args から typeName コンストラクターに対して宣言された仮引数型への強制変換を制御するカルチャ固有の情報。 culturenull の場合は、現在のスレッドの CultureInfo が使用されます。

activationAttributes
Object[]

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

このパラメーターは、クライアント側でアクティブ化されるオブジェクトに関連しています。 クライアント アクティベーションは、下位互換性のために残されているレガシ テクノロジです。新規の開発には使用しないでください。 分散アプリケーションは、代わりに Windows Communication Foundation (WCF) を使用する必要があります。

securityAttributes
Evidence

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

戻り値

新しいインスタンスのラッパーであるオブジェクト。typeName が見つからない場合は null。 実際のオブジェクトにアクセスするには、戻り値のラップを解除する必要があります。

実装

属性

例外

assemblyFilenullです。

または

typeNamenullです。

呼び出し元は、MarshalByRefObject を継承しないオブジェクトのアクティベーション属性を提供できません。

- または -

securityAttributesnull ではありません。 レガシ CAS ポリシーが有効でない場合は、securityAttributesnull にする必要があります。

アンロードされたアプリケーション ドメインで操作しようとします。

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

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

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

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

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

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

このインスタンスは null です。

注釈

このメソッドの詳細については、 メソッドを Activator.CreateInstanceFrom 参照してください。

メソッドを CreateInstanceFrom 使用して、呼び出し元のアプリケーション ドメイン以外のターゲット アプリケーション ドメインにインスタンスを作成すると、アセンブリがターゲット アプリケーション ドメインに読み込まれます。 ただし、インスタンスが呼び出し元のアプリケーション ドメインでラップ解除されている場合、ラップされていないインスタンスを特定の方法で使用すると、アセンブリが呼び出し元のアプリケーション ドメインに読み込まれる可能性があります。 たとえば、インスタンスがラップ解除された後、遅延バインドされたメソッドを呼び出すために、その型情報が要求される場合があります。 アセンブリが呼び出し元のアプリケーション ドメインに読み込まれると、例外が発生する可能性があります。

  • 同じアセンブリの別のバージョンが以前に呼び出し元のアプリケーション ドメインに読み込まれた場合、または呼び出し元のアプリケーション ドメインの読み込みパスがターゲット アプリケーション ドメインの読み込みパスと異なる場合は、 などの MissingMethodException 例外が発生する可能性があります。

  • 呼び出し元のアプリケーション ドメインがインスタンス型に対して事前にバインドされた呼び出しを行う場合、 InvalidCastException インスタンスのキャストが試行されたときにスローされる可能性があります。

こちらもご覧ください

適用対象

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

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

指定したアセンブリ ファイルで定義されている、指定した型の新しいインスタンスを作成します。

public:
 System::Runtime::Remoting::ObjectHandle ^ CreateInstanceFrom(System::String ^ assemblyFile, System::String ^ typeName, bool ignoreCase, System::Reflection::BindingFlags bindingAttr, System::Reflection::Binder ^ binder, cli::array <System::Object ^> ^ args, System::Globalization::CultureInfo ^ culture, cli::array <System::Object ^> ^ activationAttributes);
public System.Runtime.Remoting.ObjectHandle? CreateInstanceFrom (string assemblyFile, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, object?[]? args, System.Globalization.CultureInfo? culture, object?[]? activationAttributes);
public System.Runtime.Remoting.ObjectHandle CreateInstanceFrom (string assemblyFile, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes);
member this.CreateInstanceFrom : string * string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] -> System.Runtime.Remoting.ObjectHandle
Public Function CreateInstanceFrom (assemblyFile As String, typeName As String, ignoreCase As Boolean, bindingAttr As BindingFlags, binder As Binder, args As Object(), culture As CultureInfo, activationAttributes As Object()) As ObjectHandle

パラメーター

assemblyFile
String

要求する型を定義しているアセンブリが格納されているファイルの名前 (パスを含む)。 アセンブリは LoadFrom(String) メソッドを使用して読み込まれます。

typeName
String

要求する型の完全修飾名。アセンブリは指定せずに、名前空間だけを指定します。この名前は、FullName プロパティによって返されます。

ignoreCase
Boolean

検索で大文字と小文字を区別するかどうかを指定する Boolean 値。

bindingAttr
BindingFlags

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

binder
Binder

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

args
Object[]

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

culture
CultureInfo

args から typeName コンストラクターに対して宣言された仮引数型への強制変換を制御するカルチャ固有の情報。 culturenull の場合は、現在のスレッドの CultureInfo が使用されます。

activationAttributes
Object[]

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

このパラメーターは、クライアント側でアクティブ化されるオブジェクトに関連しています。 クライアント アクティベーションは、下位互換性のために残されているレガシ テクノロジです。新規の開発には使用しないでください。 分散アプリケーションは、代わりに Windows Communication Foundation (WCF) を使用する必要があります。

戻り値

新しいインスタンスのラッパーであるオブジェクト。typeName が見つからない場合は null。 実際のオブジェクトにアクセスするには、戻り値のラップを解除する必要があります。

例外

assemblyFilenull です。

または

typeNamenullです。

呼び出し元は、MarshalByRefObject を継承しないオブジェクトのアクティベーション属性を提供できません。

アンロードされたアプリケーション ドメインで操作しようとします。

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

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

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

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

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

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

このインスタンスは null です。

注釈

詳細については、Activator.CreateInstanceFrom メソッドを参照してください。

メソッドを CreateInstanceFrom 使用して、呼び出し元のアプリケーション ドメイン以外のターゲット アプリケーション ドメインにインスタンスを作成すると、アセンブリがターゲット アプリケーション ドメインに読み込まれます。 ただし、インスタンスが呼び出し元のアプリケーション ドメインでラップ解除されている場合、ラップされていないインスタンスを特定の方法で使用すると、アセンブリが呼び出し元のアプリケーション ドメインに読み込まれる可能性があります。 たとえば、インスタンスがラップ解除された後、遅延バインドされたメソッドを呼び出すために、その型情報が要求される場合があります。 アセンブリが呼び出し元のアプリケーション ドメインに読み込まれると、例外が発生する可能性があります。

  • 同じアセンブリの別のバージョンが以前に呼び出し元のアプリケーション ドメインに読み込まれた場合、または呼び出し元のアプリケーション ドメインの読み込みパスがターゲット アプリケーション ドメインの読み込みパスと異なる場合は、 などの MissingMethodException 例外が発生する可能性があります。

  • 呼び出し元のアプリケーション ドメインがインスタンス型に対して事前にバインドされた呼び出しを行う場合、 InvalidCastException インスタンスのキャストが試行されたときにスローされる可能性があります。

こちらもご覧ください

適用対象

CreateInstanceFrom(String, String, Object[])

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

指定したアセンブリ ファイルで定義されている、指定した型の新しいインスタンスを作成します。

public:
 System::Runtime::Remoting::ObjectHandle ^ CreateInstanceFrom(System::String ^ assemblyFile, System::String ^ typeName, cli::array <System::Object ^> ^ activationAttributes);
public:
 virtual System::Runtime::Remoting::ObjectHandle ^ CreateInstanceFrom(System::String ^ assemblyFile, System::String ^ typeName, cli::array <System::Object ^> ^ activationAttributes);
public System.Runtime.Remoting.ObjectHandle? CreateInstanceFrom (string assemblyFile, string typeName, object?[]? activationAttributes);
public System.Runtime.Remoting.ObjectHandle CreateInstanceFrom (string assemblyFile, string typeName, object[] activationAttributes);
member this.CreateInstanceFrom : string * string * obj[] -> System.Runtime.Remoting.ObjectHandle
abstract member CreateInstanceFrom : string * string * obj[] -> System.Runtime.Remoting.ObjectHandle
override this.CreateInstanceFrom : string * string * obj[] -> System.Runtime.Remoting.ObjectHandle
Public Function CreateInstanceFrom (assemblyFile As String, typeName As String, activationAttributes As Object()) As ObjectHandle

パラメーター

assemblyFile
String

要求する型を定義しているアセンブリが格納されているファイルの名前 (パスを含む)。 アセンブリは LoadFrom(String) メソッドを使用して読み込まれます。

typeName
String

要求する型の完全修飾名。アセンブリは指定せずに、名前空間だけを指定します。この名前は、FullName プロパティによって返されます。

activationAttributes
Object[]

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

このパラメーターは、クライアント側でアクティブ化されるオブジェクトに関連しています。クライアント アクティベーションは、下位互換性のために残されているレガシ テクノロジです。新規の開発には使用しないでください。 分散アプリケーションは、代わりに Windows Communication Foundation (WCF) を使用する必要があります。

戻り値

新しいインスタンスのラッパーであるオブジェクト。typeName が見つからない場合は null。 実際のオブジェクトにアクセスするには、戻り値のラップを解除する必要があります。

実装

例外

assemblyFilenullです。

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

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

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

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

呼び出し元は、MarshalByRefObject を継承しないオブジェクトのアクティベーション属性を提供できません。

アンロードされたアプリケーション ドメインで操作しようとします。

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

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

このインスタンスは null です。

注釈

のパラメーターなしのコンストラクター typeName が呼び出されます。

このメソッドの詳細については、 メソッドを Activator.CreateInstanceFrom 参照してください。

メソッドを CreateInstanceFrom 使用して、呼び出し元のアプリケーション ドメイン以外のターゲット アプリケーション ドメインにインスタンスを作成すると、アセンブリがターゲット アプリケーション ドメインに読み込まれます。 ただし、インスタンスが呼び出し元のアプリケーション ドメインでラップ解除されている場合は、ラップされていないインスタンスを特定の方法で使用すると、アセンブリが呼び出し元のアプリケーション ドメインに読み込まれる可能性があります。 たとえば、インスタンスがラップ解除された後、遅延バインドされたメソッドを呼び出すために、その型情報が要求される場合があります。 アセンブリが呼び出し元のアプリケーション ドメインに読み込まれると、例外が発生する可能性があります。

  • 同じアセンブリの別のバージョンが以前に呼び出し元のアプリケーション ドメインに読み込まれた場合、または呼び出し元のアプリケーション ドメインの読み込みパスがターゲット アプリケーション ドメインの読み込みパスと異なる場合は、 などの MissingMethodException 例外が発生する可能性があります。

  • 呼び出し元のアプリケーション ドメインがインスタンス型に対して事前にバインドされた呼び出しを行う場合、 InvalidCastException インスタンスのキャストが試行されたときに がスローされる可能性があります。

こちらもご覧ください

適用対象

CreateInstanceFrom(String, String)

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

指定したアセンブリ ファイルで定義されている、指定した型の新しいインスタンスを作成します。

public:
 System::Runtime::Remoting::ObjectHandle ^ CreateInstanceFrom(System::String ^ assemblyFile, System::String ^ typeName);
public:
 virtual System::Runtime::Remoting::ObjectHandle ^ CreateInstanceFrom(System::String ^ assemblyFile, System::String ^ typeName);
public System.Runtime.Remoting.ObjectHandle? CreateInstanceFrom (string assemblyFile, string typeName);
public System.Runtime.Remoting.ObjectHandle CreateInstanceFrom (string assemblyFile, string typeName);
member this.CreateInstanceFrom : string * string -> System.Runtime.Remoting.ObjectHandle
abstract member CreateInstanceFrom : string * string -> System.Runtime.Remoting.ObjectHandle
override this.CreateInstanceFrom : string * string -> System.Runtime.Remoting.ObjectHandle
Public Function CreateInstanceFrom (assemblyFile As String, typeName As String) As ObjectHandle

パラメーター

assemblyFile
String

要求する型を定義しているアセンブリが格納されているファイルの名前 (パスを含む)。 アセンブリは LoadFrom(String) メソッドを使用して読み込まれます。

typeName
String

要求する型の完全修飾名。アセンブリは指定せずに、名前空間だけを指定します。この名前は、FullName プロパティによって返されます。

戻り値

新しいインスタンスのラッパーであるオブジェクト。typeName が見つからない場合は null。 実際のオブジェクトにアクセスするには、戻り値のラップを解除する必要があります。

実装

例外

assemblyFilenullです。

または

typeNamenullです。

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

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

アンロードされたアプリケーション ドメインで操作しようとします。

パラメーターなしのパブリック コンストラクターが見つかりませんでした。

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

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

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

このインスタンスは null です。

次の例では、 メソッド オーバーロードを CreateInstanceFrom(String, String) 使用して、ターゲット アプリケーション ドメインにオブジェクトのインスタンスを作成し、そのメソッドを呼び出す方法を示します。

この例では、 クラスを MarshalableExample 定義します。これは、アプリケーション ドメインの境界を越えてマーシャリングできます。 この例では、現在実行中のアセンブリへのパスをビルドし、ターゲット アプリケーション ドメインを作成し、 メソッド オーバーロードを CreateInstanceFrom(String, String) 使用して、サンプル アセンブリをターゲット アプリケーション ドメインに読み込み、 の MarshalableExampleインスタンスを作成します。

注意

この例ではパスは絶対パスですが、 メソッドを使用してアセンブリを Assembly.LoadFrom 読み込むため、相対パスも機能します。

オブジェクト ハンドルのラップを解除した後、この例では、ターゲット アプリケーション ドメインでオブジェクトを使用する 3 つの方法を示します。

  • リフレクションを使用した遅延バインディングを使用したメソッドの呼び出し。 これには型情報が必要です。これにより、アセンブリが呼び出し元のアプリケーション ドメインに読み込まれます。 (この例では、既に読み込まれています)。

  • 呼び出し元と呼び出し先の両方に認識されているインターフェイスに オブジェクトをキャストします。 インターフェイスが呼び出し元アセンブリまたは呼び出し元と呼び出し先の両方によって参照される 3 番目のアセンブリで定義されている場合、呼び出されたアセンブリは呼び出し元のアプリケーション ドメインに読み込まれません。

  • オブジェクトの型が呼び出し元に認識されている場合に、 オブジェクトを直接使用する。 アセンブリは、呼び出し元のアプリケーション ドメインに読み込む必要があります。

呼び出し元のアプリケーション ドメインに呼び出されたアセンブリを読み込むのを避けるもう 1 つの方法は、呼び出し元が MarshalByRefObject クラスから派生し、ターゲット アプリケーション ドメインで実行できるメソッドを定義することです。 ターゲット アセンブリはターゲット アプリケーション ドメインに既に読み込まれているため、このメソッドはリフレクションを使用してターゲット アセンブリを調べることができます。 プロパティの例を DynamicDirectory 参照してください。

using namespace System;

public interface class ITest
{
    void Test(String^ greeting);
};

public ref class MarshalableExample : MarshalByRefObject, ITest
{
public:
    virtual void Test(String^ greeting)
    {
        Console::WriteLine("{0} from '{1}'!", greeting,
            AppDomain::CurrentDomain->FriendlyName);
    }
};

void main()
{
    // Construct a path to the current assembly.
    String^ assemblyPath = Environment::CurrentDirectory + "\\" +
        MarshalableExample::typeid->Assembly->GetName()->Name + ".exe";

    AppDomain^ ad = AppDomain::CreateDomain("MyDomain");
 
    System::Runtime::Remoting::ObjectHandle^ oh = 
        ad->CreateInstanceFrom(assemblyPath, "MarshalableExample");

    Object^ obj = oh->Unwrap();


    // Three ways to use the newly created object, depending on how
    // much is known about the type: Late bound, early bound through 
    // a mutually known interface, or early binding of a known type.
    //
    obj->GetType()->InvokeMember("Test", 
        System::Reflection::BindingFlags::InvokeMethod, 
        Type::DefaultBinder, obj, gcnew array<Object^> { "Hello" });

    ITest^ it = (ITest^) obj;
    it->Test("Hi");

    MarshalableExample^ ex = (MarshalableExample^) obj;
    ex->Test("Goodbye");
}

/* This example produces the following output:

Hello from 'MyDomain'!
Hi from 'MyDomain'!
Goodbye from 'MyDomain'!
 */
using System;

public interface ITest
{
    void Test(string greeting);
}

public class MarshalableExample : MarshalByRefObject, ITest
{
    static void Main()
    {
        // Construct a path to the current assembly.
        string assemblyPath = Environment.CurrentDirectory + "\\" +
            typeof(MarshalableExample).Assembly.GetName().Name + ".exe";

        AppDomain ad = AppDomain.CreateDomain("MyDomain");

        System.Runtime.Remoting.ObjectHandle oh =
            ad.CreateInstanceFrom(assemblyPath, "MarshalableExample");

        object obj = oh.Unwrap();

        // Three ways to use the newly created object, depending on how
        // much is known about the type: Late bound, early bound through
        // a mutually known interface, or early binding of a known type.
        //
        obj.GetType().InvokeMember("Test",
            System.Reflection.BindingFlags.InvokeMethod,
            Type.DefaultBinder, obj, new object[] { "Hello" });

        ITest it = (ITest) obj;
        it.Test("Hi");

        MarshalableExample ex = (MarshalableExample) obj;
        ex.Test("Goodbye");
    }

    public void Test(string greeting)
    {
        Console.WriteLine("{0} from '{1}'!", greeting,
            AppDomain.CurrentDomain.FriendlyName);
    }
}

/* This example produces the following output:

Hello from 'MyDomain'!
Hi from 'MyDomain'!
Goodbye from 'MyDomain'!
 */
open System

type ITest =
    abstract Test: string -> unit

type MarshalableExample() =
    inherit MarshalByRefObject()
    
    member _.Test greeting =
        printfn $"{greeting} from '{AppDomain.CurrentDomain.FriendlyName}'!"

    interface ITest with
        member this.Test message = this.Test message 

// Construct a path to the current assembly.
let assemblyPath = 
    Environment.CurrentDirectory + "\\" + typeof<MarshalableExample>.Assembly.GetName().Name + ".exe"

let ad = AppDomain.CreateDomain "MyDomain"

let oh =
    ad.CreateInstanceFrom(assemblyPath, "MarshalableExample")

let obj = oh.Unwrap()

// Three ways to use the newly created object, depending on how
// much is known about the type: Late bound, early bound through
// a mutually known interface, or early binding of a known type.
//
obj.GetType().InvokeMember("Test",
    System.Reflection.BindingFlags.InvokeMethod,
    Type.DefaultBinder, obj, [| box "Hello" |])
|> ignore

let it = obj :?> ITest
it.Test "Hi"

let ex = obj :?> MarshalableExample
ex.Test("Goodbye")

(* This example produces the following output:

Hello from 'MyDomain'!
Hi from 'MyDomain'!
Goodbye from 'MyDomain'!
 *)
Public Interface ITest

    Sub Test(ByVal greeting As String)
End Interface

Public Class MarshalableExample 
    Inherits MarshalByRefObject
    Implements ITest

    Shared Sub Main()
    
        ' Construct a path to the current assembly.
        Dim assemblyPath As String = Environment.CurrentDirectory & "\" &
            GetType(MarshalableExample).Assembly.GetName().Name & ".exe"

        Dim ad As AppDomain = AppDomain.CreateDomain("MyDomain")
 
        Dim oh As System.Runtime.Remoting.ObjectHandle = 
            ad.CreateInstanceFrom(assemblyPath, "MarshalableExample")

        Dim obj As Object = oh.Unwrap()


        ' Three ways to use the newly created object, depending on how
        ' much is known about the type: Late bound, early bound through 
        ' a mutually known interface, or early binding of a known type.
        '
        obj.GetType().InvokeMember("Test", 
            System.Reflection.BindingFlags.InvokeMethod, 
            Type.DefaultBinder, obj, New Object() { "Hello" })

        Dim it As ITest = CType(obj, ITest) 
        it.Test("Hi")

        Dim ex As MarshalableExample = CType(obj, MarshalableExample) 
        ex.Test("Goodbye")
    End Sub

    Public Sub Test(ByVal greeting As String) Implements ITest.Test
    
        Console.WriteLine("{0} from '{1}'!", greeting,
            AppDomain.CurrentDomain.FriendlyName)
    End Sub
End Class

' This example produces the following output:
'
'Hello from 'MyDomain'!
'Hi from 'MyDomain'!
'Goodbye from 'MyDomain'!

注釈

のパラメーターなしのコンストラクター typeName が呼び出されます。

詳細については、Activator.CreateInstanceFrom メソッドを参照してください。

メソッドを CreateInstanceFrom 使用して、呼び出し元のアプリケーション ドメイン以外のターゲット アプリケーション ドメインにインスタンスを作成すると、アセンブリがターゲット アプリケーション ドメインに読み込まれます。 ただし、インスタンスが呼び出し元のアプリケーション ドメインでラップ解除されている場合は、ラップされていないインスタンスを特定の方法で使用すると、アセンブリが呼び出し元のアプリケーション ドメインに読み込まれる可能性があります。 たとえば、インスタンスがラップ解除された後、遅延バインドされたメソッドを呼び出すために、その型情報が要求される場合があります。 アセンブリが呼び出し元のアプリケーション ドメインに読み込まれると、例外が発生する可能性があります。

  • 同じアセンブリの別のバージョンが以前に呼び出し元のアプリケーション ドメインに読み込まれた場合、または呼び出し元のアプリケーション ドメインの読み込みパスがターゲット アプリケーション ドメインの読み込みパスと異なる場合は、 などの MissingMethodException 例外が発生する可能性があります。

  • 呼び出し元のアプリケーション ドメインがインスタンス型に対して事前にバインドされた呼び出しを行う場合、 InvalidCastException インスタンスのキャストが試行されたときに がスローされる可能性があります。

こちらもご覧ください

適用対象