Bagikan melalui


AppDomain.CreateInstanceFrom Metode

Definisi

Membuat instans baru dari jenis tertentu yang ditentukan dalam file assembly yang ditentukan.

Overload

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

Membuat instans baru dari jenis yang ditentukan yang ditentukan dalam file assembly yang ditentukan.

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

Membuat instans baru dari jenis yang ditentukan yang ditentukan dalam file assembly yang ditentukan.

CreateInstanceFrom(String, String, Object[])

Membuat instans baru dari jenis yang ditentukan yang ditentukan dalam file assembly yang ditentukan.

CreateInstanceFrom(String, String)

Membuat instans baru dari jenis yang ditentukan yang ditentukan dalam file assembly yang ditentukan.

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

Perhatian

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.

Membuat instans baru dari jenis yang ditentukan yang ditentukan dalam file assembly yang ditentukan.

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

Parameter

assemblyFile
String

Nama, termasuk jalur, file yang berisi rakitan yang menentukan jenis yang diminta. Rakitan dimuat menggunakan LoadFrom(String) metode .

typeName
String

Nama yang sepenuhnya memenuhi syarat dari jenis yang diminta, termasuk namespace tetapi bukan assembly, seperti yang dikembalikan oleh FullName properti .

ignoreCase
Boolean

Nilai Boolean yang menentukan apakah akan melakukan pencarian peka huruf besar/kecil atau tidak.

bindingAttr
BindingFlags

Kombinasi bendera bit nol atau lebih yang memengaruhi pencarian typeName konstruktor. Jika bindingAttr nol, pencarian peka huruf besar/kecil untuk konstruktor publik dilakukan.

binder
Binder

Objek yang memungkinkan pengikatan, pemaksian jenis argumen, pemanggilan anggota, dan MemberInfo pengambilan objek melalui refleksi. Jika binder null, pengikat default digunakan.

args
Object[]

Argumen yang akan diteruskan ke konstruktor. Array argumen ini harus cocok dalam angka, urutan, dan ketik parameter konstruktor yang akan dipanggil. Jika konstruktor tanpa parameter lebih disukai, args harus berupa array kosong atau null.

culture
CultureInfo

Informasi khusus budaya yang mengatur koersi args ke jenis formal yang dideklarasikan untuk typeName konstruktor. Jika culture adalah null, CultureInfo untuk utas saat ini digunakan.

activationAttributes
Object[]

Array dari satu atau beberapa atribut yang dapat berpartisipasi dalam aktivasi. Biasanya, array yang berisi satu UrlAttribute objek yang menentukan URL yang diperlukan untuk mengaktifkan objek jarak jauh.

Parameter ini terkait dengan objek yang diaktifkan klien. Aktivasi klien adalah teknologi warisan yang dipertahankan untuk kompatibilitas mundur tetapi tidak direkomendasikan untuk pengembangan baru. Aplikasi terdistribusi harus menggunakan Windows Communication Foundation.

securityAttributes
Evidence

Informasi yang digunakan untuk mengotorisasi pembuatan typeName.

Mengembalikan

Objek yang merupakan pembungkus untuk instans baru, atau null jika typeName tidak ditemukan. Nilai yang dikembalikan perlu dibongkar untuk mengakses objek nyata.

Penerapan

Atribut

Pengecualian

assemblyFileadalah null.

-atau-

typeNameadalah null.

Pemanggil tidak dapat menyediakan atribut aktivasi untuk objek yang tidak mewarisi dari MarshalByRefObject.

-atau-

securityAttributes bukan null. Ketika kebijakan CAS warisan tidak diaktifkan, securityAttributes harus null.

Operasi ini dicoba pada domain aplikasi yang dibongkar.

assemblyFile tidak ditemukan.

typeName tidak ditemukan di assemblyFile.

Tidak ditemukan konstruktor publik yang cocok.

Pemanggil tidak memiliki izin yang memadai untuk memanggil konstruktor ini.

assemblyFile bukan rakitan yang valid untuk runtime yang saat ini dimuat.

Rakitan atau modul dimuat dua kali dengan dua bukti yang berbeda.

Instans ini adalah null.

Keterangan

Untuk informasi selengkapnya tentang metode ini, lihat Activator.CreateInstanceFrom metode .

CreateInstanceFrom Ketika metode digunakan untuk membuat instans di domain aplikasi target, selain domain aplikasi tempat panggilan dilakukan, rakitan dimuat di domain aplikasi target. Namun, jika instans dibongkar di domain aplikasi panggilan, menggunakan instans yang tidak dibungkus dengan cara tertentu dapat menyebabkan perakitan dimuat ke domain aplikasi panggilan. Misalnya, setelah instans dibongkar, informasi jenisnya mungkin diminta, untuk memanggil metodenya terlambat terikat. Ketika assembly dimuat ke dalam domain aplikasi panggilan, pengecualian dapat terjadi.

  • Jika versi lain dari rakitan yang sama sebelumnya dimuat ke domain aplikasi panggilan, atau jika jalur beban domain aplikasi panggilan berbeda dari domain aplikasi target, pengecualian seperti MissingMethodException dapat terjadi.

  • Jika domain aplikasi panggilan melakukan panggilan terikat awal ke jenis instans, InvalidCastException dapat dilemparkan ketika upaya dilakukan untuk melemparkan instans.

Lihat juga

Berlaku untuk

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

Sumber:
AppDomain.cs
Sumber:
AppDomain.cs
Sumber:
AppDomain.cs

Membuat instans baru dari jenis yang ditentukan yang ditentukan dalam file assembly yang ditentukan.

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

Parameter

assemblyFile
String

Nama, termasuk jalur, file yang berisi rakitan yang menentukan jenis yang diminta. Rakitan dimuat menggunakan LoadFrom(String) metode .

typeName
String

Nama yang sepenuhnya memenuhi syarat dari jenis yang diminta, termasuk namespace tetapi bukan assembly, seperti yang dikembalikan oleh FullName properti .

ignoreCase
Boolean

Nilai Boolean yang menentukan apakah akan melakukan pencarian peka huruf besar/kecil atau tidak.

bindingAttr
BindingFlags

Kombinasi bendera bit nol atau lebih yang memengaruhi pencarian typeName konstruktor. Jika bindingAttr nol, pencarian peka huruf besar/kecil untuk konstruktor publik dilakukan.

binder
Binder

Objek yang memungkinkan pengikatan, pemaksian jenis argumen, pemanggilan anggota, dan MemberInfo pengambilan objek melalui refleksi. Jika binder null, pengikat default digunakan.

args
Object[]

Argumen yang akan diteruskan ke konstruktor. Array argumen ini harus cocok dalam angka, urutan, dan ketik parameter konstruktor yang akan dipanggil. Jika konstruktor tanpa parameter lebih disukai, args harus berupa array kosong atau null.

culture
CultureInfo

Informasi khusus budaya yang mengatur koersi args ke jenis formal yang dideklarasikan untuk typeName konstruktor. Jika culture adalah null, CultureInfo untuk utas saat ini digunakan.

activationAttributes
Object[]

Array dari satu atau beberapa atribut yang dapat berpartisipasi dalam aktivasi. Biasanya, array yang berisi satu UrlAttribute objek yang menentukan URL yang diperlukan untuk mengaktifkan objek jarak jauh.

Parameter ini terkait dengan objek yang diaktifkan klien. Aktivasi klien adalah teknologi warisan yang dipertahankan untuk kompatibilitas mundur tetapi tidak direkomendasikan untuk pengembangan baru. Aplikasi terdistribusi harus menggunakan Windows Communication Foundation.

Mengembalikan

Objek yang merupakan pembungkus untuk instans baru, atau null jika typeName tidak ditemukan. Nilai yang dikembalikan perlu dibongkar untuk mengakses objek nyata.

Pengecualian

assemblyFileadalah null.

-atau-

typeNameadalah null.

Pemanggil tidak dapat menyediakan atribut aktivasi untuk objek yang tidak mewarisi dari MarshalByRefObject.

Operasi ini dicoba pada domain aplikasi yang dibongkar.

assemblyFile tidak ditemukan.

typeName tidak ditemukan di assemblyFile.

Tidak ditemukan konstruktor publik yang cocok.

Pemanggil tidak memiliki izin yang memadai untuk memanggil konstruktor ini.

assemblyFile bukan rakitan yang valid untuk runtime yang saat ini dimuat.

Rakitan atau modul dimuat dua kali dengan dua bukti yang berbeda.

Instans ini adalah null.

Keterangan

Untuk informasi lebih lanjut, lihat Activator.CreateInstanceFrommetodenya.

CreateInstanceFrom Ketika metode digunakan untuk membuat instans di domain aplikasi target, selain domain aplikasi tempat panggilan dilakukan, rakitan dimuat di domain aplikasi target. Namun, jika instans dibongkar di domain aplikasi panggilan, menggunakan instans yang tidak dibungkus dengan cara tertentu dapat menyebabkan perakitan dimuat ke domain aplikasi panggilan. Misalnya, setelah instans dibongkar, informasi jenisnya mungkin diminta, untuk memanggil metodenya terlambat terikat. Ketika assembly dimuat ke dalam domain aplikasi panggilan, pengecualian dapat terjadi.

  • Jika versi lain dari rakitan yang sama sebelumnya dimuat ke domain aplikasi panggilan, atau jika jalur beban domain aplikasi panggilan berbeda dari domain aplikasi target, pengecualian seperti MissingMethodException dapat terjadi.

  • Jika domain aplikasi panggilan melakukan panggilan terikat awal ke jenis instans, InvalidCastException dapat dilemparkan ketika upaya dilakukan untuk melemparkan instans.

Lihat juga

Berlaku untuk

CreateInstanceFrom(String, String, Object[])

Sumber:
AppDomain.cs
Sumber:
AppDomain.cs
Sumber:
AppDomain.cs

Membuat instans baru dari jenis yang ditentukan yang ditentukan dalam file assembly yang ditentukan.

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

Parameter

assemblyFile
String

Nama, termasuk jalur, file yang berisi rakitan yang menentukan jenis yang diminta. Rakitan dimuat menggunakan LoadFrom(String) metode .

typeName
String

Nama yang sepenuhnya memenuhi syarat dari jenis yang diminta, termasuk namespace tetapi bukan assembly, seperti yang dikembalikan oleh FullName properti .

activationAttributes
Object[]

Array dari satu atau beberapa atribut yang dapat berpartisipasi dalam aktivasi. Biasanya, array yang berisi satu UrlAttribute objek yang menentukan URL yang diperlukan untuk mengaktifkan objek jarak jauh.

Parameter ini terkait dengan objek yang diaktifkan klien. Aktivasi klien adalah teknologi warisan yang dipertahankan untuk kompatibilitas mundur tetapi tidak direkomendasikan untuk pengembangan baru. Aplikasi terdistribusi harus menggunakan Windows Communication Foundation.

Mengembalikan

Objek yang merupakan pembungkus untuk instans baru, atau null jika typeName tidak ditemukan. Nilai yang dikembalikan perlu dibongkar untuk mengakses objek nyata.

Penerapan

Pengecualian

assemblyFileadalah null.

assemblyFile tidak ditemukan.

typeName tidak ditemukan di assemblyFile.

Pemanggil tidak memiliki izin yang memadai untuk memanggil konstruktor ini.

Tidak ditemukan konstruktor publik yang cocok.

Pemanggil tidak dapat menyediakan atribut aktivasi untuk objek yang tidak mewarisi dari MarshalByRefObject.

Operasi ini dicoba pada domain aplikasi yang dibongkar.

assemblyFile bukan rakitan yang valid untuk runtime yang saat ini dimuat.

Rakitan atau modul dimuat dua kali dengan dua bukti yang berbeda.

Instans ini adalah null.

Keterangan

Konstruktor tanpa parameter untuk typeName dipanggil.

Untuk informasi selengkapnya tentang metode ini, lihat Activator.CreateInstanceFrom metode .

CreateInstanceFrom Ketika metode digunakan untuk membuat instans di domain aplikasi target, selain domain aplikasi tempat panggilan dilakukan, rakitan dimuat di domain aplikasi target. Namun, jika instans dibongkar di domain aplikasi panggilan, menggunakan instans yang tidak dibungkus dengan cara tertentu dapat menyebabkan perakitan dimuat ke domain aplikasi panggilan. Misalnya, setelah instans dibongkar, informasi jenisnya mungkin diminta, untuk memanggil metodenya terlambat terikat. Ketika assembly dimuat ke dalam domain aplikasi panggilan, pengecualian dapat terjadi.

  • Jika versi lain dari rakitan yang sama sebelumnya dimuat ke domain aplikasi panggilan, atau jika jalur beban domain aplikasi panggilan berbeda dari domain aplikasi target, pengecualian seperti MissingMethodException dapat terjadi.

  • Jika domain aplikasi panggilan melakukan panggilan terikat awal ke jenis instans, InvalidCastException dapat dilemparkan ketika upaya dilakukan untuk melemparkan instans.

Lihat juga

Berlaku untuk

CreateInstanceFrom(String, String)

Sumber:
AppDomain.cs
Sumber:
AppDomain.cs
Sumber:
AppDomain.cs

Membuat instans baru dari jenis yang ditentukan yang ditentukan dalam file assembly yang ditentukan.

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

Parameter

assemblyFile
String

Nama, termasuk jalur, file yang berisi rakitan yang menentukan jenis yang diminta. Rakitan dimuat menggunakan LoadFrom(String) metode .

typeName
String

Nama yang sepenuhnya memenuhi syarat dari jenis yang diminta, termasuk namespace tetapi bukan assembly, seperti yang dikembalikan oleh FullName properti .

Mengembalikan

Objek yang merupakan pembungkus untuk instans baru, atau null jika typeName tidak ditemukan. Nilai yang dikembalikan perlu dibongkar untuk mengakses objek nyata.

Penerapan

Pengecualian

assemblyFileadalah null.

-atau-

typeNameadalah null.

assemblyFile tidak ditemukan.

typeName tidak ditemukan di assemblyFile.

Operasi ini dicoba pada domain aplikasi yang dibongkar.

Tidak ada konstruktor publik tanpa parameter yang ditemukan.

Pemanggil tidak memiliki izin yang memadai untuk memanggil konstruktor ini.

assemblyFile bukan rakitan yang valid untuk runtime yang saat ini dimuat.

Rakitan atau modul dimuat dua kali dengan dua bukti yang berbeda.

Instans ini adalah null.

Contoh

Contoh berikut menunjukkan cara menggunakan CreateInstanceFrom(String, String) metode kelebihan beban untuk membuat instans objek di domain aplikasi target dan memanggil metodenya.

Contohnya mendefinisikan MarshalableExample kelas , yang dapat dirusak di seluruh batas domain aplikasi. Contoh ini membangun jalur ke rakitan yang saat ini dijalankan, membuat domain aplikasi target, dan menggunakan metode kelebihan beban untuk memuat perakitan contoh ke domain aplikasi target dan membuat instans CreateInstanceFrom(String, String)MarshalableExample.

Catatan

Jalur ini mutlak dalam contoh ini, tetapi jalur relatif juga akan berfungsi karena Assembly.LoadFrom metode ini digunakan untuk memuat perakitan.

Setelah membongkar handel objek, contoh menunjukkan tiga cara untuk menggunakan objek di domain aplikasi target:

  • Memanggil metode dengan pengikatan terlambat, menggunakan refleksi. Ini memerlukan informasi jenis, yang menyebabkan perakitan dimuat ke dalam domain aplikasi pemanggil. (Dalam contoh ini, sudah dimuat.)

  • Transmisi objek ke antarmuka yang diketahui oleh pemanggil dan penerima panggilan. Jika antarmuka didefinisikan dalam rakitan panggilan atau dalam rakitan ketiga yang direferensikan oleh penelepon dan penerima panggilan, perakitan yang disebut tidak dimuat ke domain aplikasi pemanggil.

  • Menggunakan objek secara langsung ketika jenisnya diketahui oleh pemanggil. Perakitan harus dimuat ke dalam domain aplikasi pemanggil.

Cara lain untuk menghindari pemuatan rakitan yang disebut ke domain aplikasi pemanggil adalah agar pemanggil berasal dari MarshalByRefObject kelas dan untuk menentukan metode yang dapat dijalankan di domain aplikasi target. Metode tersebut dapat menggunakan refleksi untuk memeriksa rakitan target, karena rakitan target sudah dimuat ke dalam domain aplikasi target. Lihat contoh untuk DynamicDirectory properti .

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'!

Keterangan

Konstruktor tanpa parameter untuk typeName dipanggil.

Untuk informasi lebih lanjut, lihat Activator.CreateInstanceFrommetodenya.

CreateInstanceFrom Ketika metode digunakan untuk membuat instans di domain aplikasi target, selain domain aplikasi tempat panggilan dilakukan, rakitan dimuat di domain aplikasi target. Namun, jika instans dibongkar di domain aplikasi panggilan, menggunakan instans yang tidak dibungkus dengan cara tertentu dapat menyebabkan perakitan dimuat ke domain aplikasi panggilan. Misalnya, setelah instans dibongkar, informasi jenisnya mungkin diminta, untuk memanggil metodenya terlambat terikat. Ketika assembly dimuat ke dalam domain aplikasi panggilan, pengecualian dapat terjadi.

  • Jika versi lain dari rakitan yang sama sebelumnya dimuat ke domain aplikasi panggilan, atau jika jalur beban domain aplikasi panggilan berbeda dari domain aplikasi target, pengecualian seperti MissingMethodException dapat terjadi.

  • Jika domain aplikasi panggilan melakukan panggilan terikat awal ke jenis instans, InvalidCastException dapat dilemparkan ketika upaya dilakukan untuk melemparkan instans.

Lihat juga

Berlaku untuk