Udostępnij za pośrednictwem


AppDomain.CreateInstanceFrom Metoda

Definicja

Tworzy nowe wystąpienie danego typu zdefiniowane w określonym pliku zestawu.

Przeciążenia

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

Tworzy nowe wystąpienie określonego typu zdefiniowanego w podanym pliku zestawu.

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

Tworzy nowe wystąpienie określonego typu zdefiniowanego w podanym pliku zestawu.

CreateInstanceFrom(String, String, Object[])

Tworzy nowe wystąpienie określonego typu zdefiniowanego w podanym pliku zestawu.

CreateInstanceFrom(String, String)

Tworzy nowe wystąpienie określonego typu zdefiniowanego w podanym pliku zestawu.

CreateInstanceFrom(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 CreateInstanceFrom 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 zdefiniowanego w podanym pliku zestawu.

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

Parametry

assemblyFile
String

Nazwa (łącznie ze ścieżką) pliku zawierającego zestaw, który definiuje żądany typ. Zestaw jest ładowany przy użyciu LoadFrom(String) metody .

typeName
String

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

ignoreCase
Boolean

Wartość logiczna określająca, czy w wyszukiwaniu ma być uwzględniana wielkość liter czy nie.

bindingAttr
BindingFlags

Kombinacja flag zero lub więcej bitów, które wpływają na wyszukiwanie konstruktora typeName . Jeśli bindingAttr wartość jest równa 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 MemberInfo obiektów przez odbicie. Jeśli binder parametr ma wartość null, jest używany domyślny binder.

args
Object[]

Argumenty, które mają zostać przekazane do konstruktora. Ta tablica argumentów musi pod względem liczby, kolejności i typów parametrów odpowiadać konstruktorowi, który ma zostać wywołany. Jeśli preferowany jest konstruktor bez parametrów, args musi być pustą tablicą lub wartością null.

culture
CultureInfo

Informacje specyficzne dla kultury, które regulują przymus do args typów formalnych zadeklarowanych dla konstruktora typeName . Jeśli culture parametr ma nullwartość , CultureInfo jest używany dla bieżącego wątku.

activationAttributes
Object[]

Tablica jednego lub więcej atrybutów, które mogą brać udział w aktywacji. Zazwyczaj tablica zawierająca pojedynczy UrlAttribute obiekt, który 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 przechowywana 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 elementu typeName.

Zwraca

Obiekt, który jest otoką dla nowego wystąpienia lub null jeśli typeName nie zostanie znaleziony. Zwracana wartość musi być bez otoki, aby miała dostęp do rzeczywistego obiektu.

Implementuje

Atrybuty

Wyjątki

assemblyFile to null.

-lub-

typeName to null.

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

-lub-

securityAttributes nie nulljest . Jeśli starsze zasady CAS nie są włączone, securityAttributes powinna mieć wartość null.

Próba wykonania operacji w niezaładowanej domenie aplikacji.

assemblyFile nie można odnaleźć.

typeName nie można odnaleźć w pliku assemblyFile.

Nie znaleziono pasującego publicznego konstruktora.

Obiekt wywołujący nie ma wystarczających uprawnień do wywołania tego konstruktora.

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

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

To wystąpienie to null.

Uwagi

Aby uzyskać więcej informacji na temat tej metody, zobacz metodę Activator.CreateInstanceFrom .

CreateInstanceFrom Gdy metoda jest używana do tworzenia wystąpienia w domenie aplikacji docelowej, innej niż domena aplikacji, z której jest wykonywane wywołanie, zestaw jest ładowany w domenie aplikacji docelowej. Jeśli jednak wystąpienie nie zostanie rozwinięte w domenie aplikacji wywołującej, użycie nierozwiniętych instancji w określony sposób może spowodować załadowanie zestawu do domeny aplikacji wywołującej. Na przykład po rozwinięciu danego wystąpienia można zażądać informacji o typie, aby wywołać jego metody z późnym wiązaniem. Podczas ładowania zestawu do domeny aplikacji wywołującej mogą wystąpić wyjątki.

  • Jeśli inna wersja tego samego zestawu została wcześniej załadowana do domeny aplikacji wywołującej lub jeśli ścieżka ładowania domeny aplikacji wywołującej różni się od tej domeny aplikacji docelowej, mogą wystąpić wyjątki, takie jak MissingMethodException .

  • Jeśli domena aplikacji wywołującej wykonuje wczesne wywołania typu wystąpienia, InvalidCastException może zostać zgłoszony podczas próby rzutowania wystąpienia.

Zobacz też

Dotyczy

CreateInstanceFrom(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 podanym pliku zestawu.

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

Parametry

assemblyFile
String

Nazwa (łącznie ze ścieżką) pliku zawierającego zestaw, który definiuje żądany typ. Zestaw jest ładowany przy użyciu LoadFrom(String) metody .

typeName
String

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

ignoreCase
Boolean

Wartość logiczna określająca, czy w wyszukiwaniu ma być uwzględniana wielkość liter czy nie.

bindingAttr
BindingFlags

Kombinacja flag zero lub więcej bitów, które wpływają na wyszukiwanie konstruktora typeName . Jeśli bindingAttr wartość jest równa 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 MemberInfo obiektów przez odbicie. Jeśli binder parametr ma wartość null, jest używany domyślny binder.

args
Object[]

Argumenty, które mają zostać przekazane do konstruktora. Ta tablica argumentów musi pod względem liczby, kolejności i typów parametrów odpowiadać konstruktorowi, który ma zostać wywołany. Jeśli preferowany jest konstruktor bez parametrów, args musi być pustą tablicą lub wartością null.

culture
CultureInfo

Informacje specyficzne dla kultury, które regulują przymus do args typów formalnych zadeklarowanych dla konstruktora typeName . Jeśli culture parametr ma nullwartość , CultureInfo jest używany dla bieżącego wątku.

activationAttributes
Object[]

Tablica jednego lub więcej atrybutów, które mogą brać udział w aktywacji. Zazwyczaj tablica zawierająca pojedynczy UrlAttribute obiekt, który 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 przechowywana 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

Obiekt, który jest otoką dla nowego wystąpienia lub null jeśli typeName nie zostanie znaleziony. Zwracana wartość musi być bez otoki, aby miała dostęp do rzeczywistego obiektu.

Wyjątki

assemblyFile to null.

-lub-

typeName to null.

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

Próba wykonania operacji w niezaładowanej domenie aplikacji.

assemblyFile nie można odnaleźć.

typeName nie można odnaleźć w pliku assemblyFile.

Nie znaleziono pasującego publicznego konstruktora.

Obiekt wywołujący nie ma wystarczających uprawnień do wywołania tego konstruktora.

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

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

To wystąpienie to null.

Uwagi

Aby uzyskać więcej informacji, zobacz metodę Activator.CreateInstanceFrom .

CreateInstanceFrom Gdy metoda jest używana do tworzenia wystąpienia w domenie aplikacji docelowej, innej niż domena aplikacji, z której jest wykonywane wywołanie, zestaw jest ładowany w domenie aplikacji docelowej. Jeśli jednak wystąpienie nie zostanie rozwinięte w domenie aplikacji wywołującej, użycie nierozwiniętych instancji w określony sposób może spowodować załadowanie zestawu do domeny aplikacji wywołującej. Na przykład po rozwinięciu danego wystąpienia można zażądać informacji o typie, aby wywołać jego metody z późnym wiązaniem. Podczas ładowania zestawu do domeny aplikacji wywołującej mogą wystąpić wyjątki.

  • Jeśli inna wersja tego samego zestawu została wcześniej załadowana do domeny aplikacji wywołującej lub jeśli ścieżka ładowania domeny aplikacji wywołującej różni się od tej domeny aplikacji docelowej, mogą wystąpić wyjątki, takie jak MissingMethodException .

  • Jeśli domena aplikacji wywołującej wykonuje wczesne wywołania typu wystąpienia, InvalidCastException może zostać zgłoszony podczas próby rzutowania wystąpienia.

Zobacz też

Dotyczy

CreateInstanceFrom(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 zdefiniowanego w podanym pliku zestawu.

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

Parametry

assemblyFile
String

Nazwa (łącznie ze ścieżką) pliku zawierającego zestaw, który definiuje żądany typ. Zestaw jest ładowany przy użyciu LoadFrom(String) metody .

typeName
String

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

activationAttributes
Object[]

Tablica jednego lub więcej atrybutów, które mogą brać udział w aktywacji. Zazwyczaj tablica zawierająca pojedynczy UrlAttribute obiekt, który 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 przechowywana 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

Obiekt, który jest otoką dla nowego wystąpienia lub null jeśli typeName nie zostanie znaleziony. Zwracana wartość musi być bez otoki, aby miała dostęp do rzeczywistego obiektu.

Implementuje

Wyjątki

assemblyFile to null.

assemblyFile nie można odnaleźć.

typeName nie można odnaleźć w pliku assemblyFile.

Obiekt wywołujący nie ma wystarczających uprawnień do wywołania tego konstruktora.

Nie znaleziono pasującego publicznego konstruktora.

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

Próba wykonania operacji w niezaładowanej domenie aplikacji.

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

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

To wystąpienie to null.

Uwagi

Wywoływany jest konstruktor bez parametrów dla typeName .

Aby uzyskać więcej informacji na temat tej metody, zobacz metodę Activator.CreateInstanceFrom .

CreateInstanceFrom Gdy metoda jest używana do tworzenia wystąpienia w domenie aplikacji docelowej, innej niż domena aplikacji, z której jest wykonywane wywołanie, zestaw jest ładowany w domenie aplikacji docelowej. Jeśli jednak wystąpienie nie zostanie rozwinięte w domenie aplikacji wywołującej, użycie nierozwiniętych instancji w określony sposób może spowodować załadowanie zestawu do domeny aplikacji wywołującej. Na przykład po rozwinięciu danego wystąpienia można zażądać informacji o typie, aby wywołać jego metody z późnym wiązaniem. Podczas ładowania zestawu do domeny aplikacji wywołującej mogą wystąpić wyjątki.

  • Jeśli inna wersja tego samego zestawu została wcześniej załadowana do domeny aplikacji wywołującej lub jeśli ścieżka ładowania domeny aplikacji wywołującej różni się od tej domeny aplikacji docelowej, mogą wystąpić wyjątki, takie jak MissingMethodException .

  • Jeśli domena aplikacji wywołującej wykonuje wczesne wywołania typu wystąpienia, InvalidCastException może zostać zgłoszony podczas próby rzutowania wystąpienia.

Zobacz też

Dotyczy

CreateInstanceFrom(String, String)

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

Tworzy nowe wystąpienie określonego typu zdefiniowanego w podanym pliku zestawu.

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

Parametry

assemblyFile
String

Nazwa (łącznie ze ścieżką) pliku zawierającego zestaw, który definiuje żądany typ. Zestaw jest ładowany przy użyciu LoadFrom(String) metody .

typeName
String

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

Zwraca

Obiekt, który jest otoką dla nowego wystąpienia lub null jeśli typeName nie zostanie znaleziony. Zwracana wartość musi być bez otoki, aby miała dostęp do rzeczywistego obiektu.

Implementuje

Wyjątki

assemblyFile to null.

-lub-

typeName to null.

assemblyFile nie można odnaleźć.

typeName nie można odnaleźć w pliku assemblyFile.

Próba wykonania operacji w niezaładowanej domenie aplikacji.

Nie znaleziono konstruktora publicznego bez parametrów.

Obiekt wywołujący nie ma wystarczających uprawnień do wywołania tego konstruktora.

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

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

To wystąpienie to null.

Przykłady

W poniższym przykładzie pokazano, jak użyć CreateInstanceFrom(String, String) przeciążenia metody do utworzenia wystąpienia obiektu w domenie aplikacji docelowej i wywołania jego metod.

W przykładzie zdefiniowano klasę MarshalableExample , która może być marshaledowana przez granice domeny aplikacji. Przykład tworzy ścieżkę do aktualnie wykonywanego zestawu, tworzy domenę aplikacji docelowej i używa CreateInstanceFrom(String, String) przeciążenia metody, aby załadować przykładowy zestaw do domeny aplikacji docelowej i utworzyć wystąpienie MarshalableExample.

Uwaga

Ścieżka jest bezwzględna w tym przykładzie, ale ścieżka względna również zadziała, ponieważ Assembly.LoadFrom metoda jest używana do ładowania zestawu.

Po rozpasaniu uchwytu obiektu w przykładzie pokazano trzy sposoby użycia obiektu w domenie aplikacji docelowej:

  • Wywoływanie metody z późnym powiązaniem przy użyciu odbicia. Wymaga to informacji o typie, co powoduje załadowanie zestawu do domeny aplikacji obiektu wywołującego. (W tym przykładzie jest już załadowany).

  • Rzutowanie obiektu do interfejsu znanego zarówno dla obiektu wywołującego, jak i wywoływanego. Jeśli interfejs jest zdefiniowany w zestawie wywołującym lub w trzecim zestawie przywoływanym zarówno przez obiekt wywołujący, jak i wywoływany, wywoływany zestaw nie jest ładowany do domeny aplikacji obiektu wywołującego.

  • Używanie obiektu bezpośrednio, gdy jego typ jest znany obiektowi wywołującego. Zestaw musi zostać załadowany do domeny aplikacji obiektu wywołującego.

Innym sposobem uniknięcia ładowania wywoływanego zestawu do domeny aplikacji obiektu wywołującego jest, aby obiekt wywołujący pochodził z MarshalByRefObject klasy i zdefiniować metodę, która może być uruchamiana w domenie aplikacji docelowej. Ta metoda może użyć odbicia w celu zbadania zestawu docelowego, ponieważ zestaw docelowy jest już załadowany do domeny aplikacji docelowej. Zobacz przykład DynamicDirectory właściwości .

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

Uwagi

Wywoływany jest konstruktor bez parametrów dla typeName .

Aby uzyskać więcej informacji, zobacz metodę Activator.CreateInstanceFrom .

CreateInstanceFrom Gdy metoda jest używana do tworzenia wystąpienia w domenie aplikacji docelowej, innej niż domena aplikacji, z której jest wykonywane wywołanie, zestaw jest ładowany w domenie aplikacji docelowej. Jeśli jednak wystąpienie nie zostanie rozwinięte w domenie aplikacji wywołującej, użycie nierozwiniętych instancji w określony sposób może spowodować załadowanie zestawu do domeny aplikacji wywołującej. Na przykład po rozwinięciu danego wystąpienia można zażądać informacji o typie, aby wywołać jego metody z późnym wiązaniem. Podczas ładowania zestawu do domeny aplikacji wywołującej mogą wystąpić wyjątki.

  • Jeśli inna wersja tego samego zestawu została wcześniej załadowana do domeny aplikacji wywołującej lub jeśli ścieżka ładowania domeny aplikacji wywołującej różni się od tej domeny aplikacji docelowej, mogą wystąpić wyjątki, takie jak MissingMethodException .

  • Jeśli domena aplikacji wywołującej wykonuje wczesne wywołania typu wystąpienia, InvalidCastException może zostać zgłoszony podczas próby rzutowania wystąpienia.

Zobacz też

Dotyczy