Assembly: mscorlib (in mscorlib.dll)
<SerializableAttribute> _ <ComVisibleAttribute(True)> _ Public MustInherit Class MarshalByRefObject
Dim instance As MarshalByRefObject
[SerializableAttribute] [ComVisibleAttribute(true)] public abstract class MarshalByRefObject
[SerializableAttribute] [ComVisibleAttribute(true)] public ref class MarshalByRefObject abstract
/** @attribute SerializableAttribute() */ /** @attribute ComVisibleAttribute(true) */ public abstract class MarshalByRefObject
SerializableAttribute ComVisibleAttribute(true) public abstract class MarshalByRefObject
Un dominio applicazione è una partizione di un processo del sistema operativo in cui risiede una o più applicazioni. La comunicazione fra gli oggetti all'interno del medesimo dominio applicazione è diretta. La comunicazione fra gli oggetti in domini applicazioni diversi avviene invece tramite il trasporto di copie degli oggetti stessi oltre i limiti del dominio applicazione oppure utilizzando un proxy per lo scambio di messaggi.
MarshalByRefObject è la classe base per gli oggetti in grado di comunicare oltre i limiti del dominio applicazioni con scambi di messaggi tramite un proxy. Gli oggetti che non ereditano da MarshalByRefObject sono implicitamente marshalling per valore. Quando un'applicazione remota fa riferimento a un oggetto marshalling per valore, una copia dell'oggetto viene passata oltre i limiti del dominio applicazione.
Si accede agli oggetti MarshalByRefObject direttamente all'interno del dominio applicazione. La prima volta che un'applicazione in un dominio applicazione remoto ha accesso a un oggetto MarshalByRefObject, viene passato un proxy all'applicazione remota. Per le chiamate successive sul proxy viene nuovamente effettuato il marshalling all'oggetto che risiede nel dominio applicazione locale.
I tipi devono ereditare da MarshalByRefObject quando il tipo viene utilizzato oltre i limiti del dominio applicazione e lo stato dell'oggetto non deve essere copiato poiché i membri di quest'ultimo non sono utilizzabili al di fuori del dominio applicazione in cui sono stati creati.
Nell'esempio seguente viene illustrato l'utilizzo di una classe derivata da MarshalByRefObject utilizzato in seguito nei servizi remoti.
Imports System Imports System.Runtime.Remoting Imports System.Security.Permissions Public Class SetObjectUriForMarshalTest Class TestClass Inherits MarshalByRefObject End Class <SecurityPermission(SecurityAction.LinkDemand)> _ Public Shared Sub Main() Dim obj As TestClass = New TestClass() RemotingServices.SetObjectUriForMarshal(obj, "testUri") RemotingServices.Marshal(obj) Console.WriteLine(RemotingServices.GetObjectUri(obj)) End Sub End Class
using System; using System.Runtime.Remoting; using System.Security.Permissions; public class SetObjectUriForMarshalTest { class TestClass : MarshalByRefObject { } [SecurityPermission(SecurityAction.LinkDemand)] public static void Main() { TestClass obj = new TestClass(); RemotingServices.SetObjectUriForMarshal(obj, "testUri"); RemotingServices.Marshal(obj); Console.WriteLine(RemotingServices.GetObjectUri(obj)); } }
using namespace System; using namespace System::Runtime::Remoting; using namespace System::Security::Permissions; public ref class SetObjectUriForMarshalTest { public: ref class TestClass: public MarshalByRefObject{}; [SecurityPermissionAttribute(SecurityAction::Demand, Flags=SecurityPermissionFlag::Infrastructure)] static void Main() { TestClass^ obj = gcnew TestClass; RemotingServices::SetObjectUriForMarshal( obj, "testUri" ); RemotingServices::Marshal(obj); Console::WriteLine( RemotingServices::GetObjectUri( obj ) ); } };
System.MarshalByRefObject
Classi derivate
Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile per Pocket PC, Windows Mobile per Smartphone, 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.