Questa documentazione è stata archiviata e non viene gestita.

Classe ObjectHandle

Esegue il wrapping di riferimenti a oggetti marshalling per valore, consentendone la restituzione tramite un riferimento indiretto.

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

[ComVisibleAttribute(true)] 
[ClassInterfaceAttribute(ClassInterfaceType.AutoDual)] 
public class ObjectHandle : MarshalByRefObject, IObjectHandle
/** @attribute ComVisibleAttribute(true) */ 
/** @attribute ClassInterfaceAttribute(ClassInterfaceType.AutoDual) */ 
public class ObjectHandle extends MarshalByRefObject implements IObjectHandle
ComVisibleAttribute(true) 
ClassInterfaceAttribute(ClassInterfaceType.AutoDual) 
public class ObjectHandle extends MarshalByRefObject implements IObjectHandle

La classe ObjectHandle è utilizzata per passare da un dominio applicazione a un altro un oggetto di cui è stato eseguito il wrapping senza caricare nei singoli AppDomain attraverso cui viaggia l'oggetto ObjectHandle i metadati relativi all'oggetto di cui è stato eseguito il wrapping. La classe ObjectHandle pertanto fornisce al chiamante il controllo sul momento in cui il Type dell'oggetto remoto viene caricato in un dominio.

Nell'esempio di codice riportato di seguito viene illustrato come creare un oggetto in un altro oggetto AppDomain e come recuperare un proxy per l'oggetto da una classe ObjectHandle. In questo esempio si presume che il codice della classe MyType sia compilato in un assembly denominato "ObjectHandleAssembly".

using System;
using System.Runtime.Remoting;


public class MyType : MarshalByRefObject {

   public MyType()  {
      Console.Write("Created an instance of MyType in an AppDomain with the ");
      Console.WriteLine("hash code {0}",AppDomain.CurrentDomain.GetHashCode());
      Console.WriteLine("");
   }

   public int GetAppDomainHashCode() {
      return AppDomain.CurrentDomain.GetHashCode();
   }
}


class Test {

   public static void Main() {

      Console.WriteLine("The hash code of the default AppDomain is {0}.", 
                        AppDomain.CurrentDomain.GetHashCode());
      Console.WriteLine("");

      // Creates another AppDomain.
      AppDomain domain = AppDomain.CreateDomain("AnotherDomain", 
                                                null, 
                                                (AppDomainSetup)null);

      // Creates an instance of MyType defined in the assembly called ObjectHandleAssembly.
      ObjectHandle obj = domain.CreateInstance("ObjectHandleAssembly", "MyType");

      // Unwrapps the proxy to the MyType object created in the other AppDomain.
      MyType testObj = (MyType)obj.Unwrap();

      if(RemotingServices.IsTransparentProxy(testObj))
         Console.WriteLine("The unwrapped object is a proxy.");
      else
         Console.WriteLine("The unwrapped object is not a proxy!");    

      Console.WriteLine("");
      Console.Write("Calling a method on the object located in an AppDomain with the hash code ");
      Console.WriteLine(testObj.GetAppDomainHashCode());
   }
}

System.Object
   System.MarshalByRefObject
    System.Runtime.Remoting.ObjectHandle

I membri statici pubblici (Shared in Visual Basic) di questo tipo sono validi per le operazioni multithreading. I membri di istanza non sono garantiti come thread safe.

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema.

.NET Framework

Supportato in: 2.0 1.1 1.0
Mostra: