Permite obtener acceso a objetos a través de los límites de los dominios de las aplicaciones que admiten acceso remoto.
Espacio de nombres: System
Ensamblado: mscorlib (en mscorlib.dll)

Sintaxis
Visual Basic (Declaración)
<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

Comentarios
Un dominio de aplicación es una partición en el proceso de un sistema operativo en el que residen una o más aplicaciones. Los objetos que están en el mismo dominio de aplicación se comunican directamente. Los objetos de diferentes dominios de aplicación se comunican bien transportando copias de objetos a través de los límites de los dominios de aplicación o utilizando un proxy para intercambiar mensajes.
MarshalByRefObject es la clase base de los objetos que se comunican a través de los límites de los dominios de aplicación que utilizan un proxy para intercambiar mensajes. Los objetos que no heredan de MarshalByRefObject tienen implícitamente valor de resolución. Cuando una aplicación remota hace referencia a un objeto con valor de resolución, se pasa una copia del objeto a través de los límites del dominio de la aplicación.
Es posible obtener acceso a los objetos MarshalByRefObject directamente dentro de los límites del dominio local de la aplicación. La primera vez que una aplicación en un dominio de aplicación remoto obtiene acceso a un MarshalByRefObject, se pasa un proxy a la aplicación remota. El cálculo de referencias de las siguientes llamadas que se realizan en el proxy, volverá a tener lugar en el objeto que reside en el dominio de la aplicación local.
Los tipos deben heredar de MarshalByRefObject, cuando el tipo se utiliza en los límites de los dominios de las aplicaciones, y no se debe copiar el estado del objeto porque los miembros del objeto no se utilicen fuera del dominio de la aplicación en el que se crearon.

Ejemplo
El siguiente ejemplo muestra una clase derivada de MarshalByRefObject que se utilizará más tarde de forma remota.
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 ) );
}
};

Jerarquía de herencia

Seguridad para subprocesos
Los miembros estáticos públicos (
Shared en Visual Basic) de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Plataformas
Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium, Windows Mobile para Pocket PC, Windows Mobile para Smartphone, Windows Server 2003, Windows XP Media Center, Windows XP Professional x64, Windows XP SP2, Windows XP Starter Edition
.NET Framework no admite todas las versiones de cada plataforma. Para obtener una lista de las versiones admitidas, vea Requisitos del sistema.

Información de versión
.NET Framework
Compatible con: 2.0, 1.1, 1.0
.NET Compact Framework
Compatible con: 2.0, 1.0

Vea también