Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo AppDomain.CreateInstanceAndUnwrap (String, String)

 

Data di pubblicazione: novembre 2016

Crea una nuova istanza del tipo specificato. I parametri specificano l'assembly in cui è definito il tipo e il nome del tipo.

Spazio dei nomi:   System
Assembly:  mscorlib (in mscorlib.dll)

public object CreateInstanceAndUnwrap(
	string assemblyName,
	string typeName
)

Parametri

assemblyName
Type: System.String

Nome visualizzato dell'assembly. Vedere Assembly.FullName.

typeName
Type: System.String

Nome completo del tipo richiesto, compreso lo spazio dei nomi ed escluso l'assembly, restituito dalla proprietà Type.FullName.

Valore restituito

Type: System.Object

Istanza dell'oggetto specificato da typeName.

Exception Condition
ArgumentNullException

assemblyName o typeName è null.

MissingMethodException

Non è stato trovato alcun costruttore pubblico corrispondente.

TypeLoadException

Non è possibile trovare typename in assemblyName.

FileNotFoundException

Il parametro assemblyName non è stato trovato.

MethodAccessException

Il chiamante non ha l'autorizzazione necessaria per chiamare il costruttore.

AppDomainUnloadedException

L'operazione viene tentata in un dominio dell'applicazione non caricato.

BadImageFormatException

assemblyName non è un assembly valido.

-oppure-

Attualmente è caricata la versione 2.0 o successiva di Common Language Runtime e l'oggetto assemblyName è stato compilato con una versione successiva.

FileLoadException

Un assembly o un modulo è stato caricato due volte con due evidenze diverse.

Si tratta di un metodo pratico che combina CreateInstance e ObjectHandle.Unwrap. Questo metodo chiama il costruttore predefinito per typeName.

Vedere AssemblyName per il formato di assemblyName. Vedere il Type.FullName proprietà per il formato di typeName.

System_CAPS_noteNota

Se si effettua una chiamata con associazione anticipata a un metodo M di un oggetto di tipo T1 che è stato restituito da CreateInstanceAndUnwrap, e tale metodo effettua una chiamata con associazione anticipata a un metodo di un oggetto di tipo T2 in un assembly C diverso dall'assembly corrente o l'assembly contenente T1, assembly C viene caricato nel dominio applicazione corrente. Il caricamento si verifica anche se l'associazione anticipata chiamata a T1.M() è stata effettuata nel corpo di un DynamicMethod, o in altro codice generato dinamicamente. Se il dominio corrente è il dominio predefinito, assembly C non può essere scaricato finché non termina il processo. Se il dominio corrente in un secondo momento tenta di caricare l'assembly C, potrebbe non riuscire.

Esempio di codice seguente viene illustrato il modo più semplice per eseguire codice in un altro dominio applicazione. Nell'esempio viene definita una classe denominata Worker che eredita da MarshalByRefObject. La Worker classe definisce un metodo che visualizza il nome del dominio dell'applicazione in cui è in esecuzione. L'esempio crea istanze di Worker nel dominio applicazione predefinito in un nuovo dominio applicazione.

System_CAPS_noteNota

L'assembly che contiene Worker deve essere caricato in entrambi i domini applicazione, ma può caricare altri assembly che esiste solo nel nuovo dominio applicazione.

using System;
using System.Reflection;

public class Worker : MarshalByRefObject
{
    public void PrintDomain() 
    { 
        Console.WriteLine("Object is executing in AppDomain \"{0}\"",
            AppDomain.CurrentDomain.FriendlyName); 
    }
}

class Example
{
    public static void Main()
    {
        // Create an ordinary instance in the current AppDomain
        Worker localWorker = new Worker();
        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");
        Worker remoteWorker = (Worker) ad.CreateInstanceAndUnwrap(
            typeof(Worker).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"
 */

FileIOPermissionAccess

for the ability to access the location of the assembly if code base is supplied by a configuration file. Associated enumeration: F:System.Security.Permissions.FileIOPermissionAccess.PathDiscovery

FileIOPermissionAccess

for the ability to read the file containing the assembly manifest, or if you are creating a type from a module other than the manifest file. Associated enumeration: F:System.Security.Permissions.FileIOPermissionAccess.Read

WebPermission

for the ability to access the location of the assembly if the assembly is not local.

.NET Framework
Disponibile da 1.1
Torna all'inizio
Mostra: