다음을 통해 공유


MarshalByRefObject 클래스

원격 처리 기능을 지원하는 응용 프로그램에서 응용 프로그램 도메인 간 경계를 넘어 개체에 액세스할 수 있습니다.

네임스페이스: System
어셈블리: mscorlib(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

설명

응용 프로그램 도메인은 하나 이상의 응용 프로그램이 있는 운영 체제 프로세스에서 하나의 파티션에 해당합니다. 같은 응용 프로그램 도메인의 개체는 직접 통신합니다. 다른 응용 프로그램 도메인의 개체는 응용 프로그램 도메인 경계를 넘어 개체 복사본을 전송하거나 프록시를 사용하여 메시지를 교환하는 방법으로 통신합니다.

MarshalByRefObject는 프록시를 사용하여 메시지를 교환하는 방식으로 응용 프로그램 도메인 겅계를 넘어 통신하는 개체의 기본 클래스입니다. MarshalByRefObject에서 상속되지 않은 개체는 값으로 암시적으로 마샬링됩니다. 원격 응용 프로그램이 값 개체에 의해 마샬링을 참조하는 경우, 해당 개체의 복사본이 응용 프로그램 도메인 경계를 넘어 전달됩니다.

MarshalByRefObject 개체는 로컬 응용 프로그램 도메인의 경계 내에서 직접 액세스합니다. 원격 응용 프로그램 도메인의 응용 프로그램이 MarshalByRefObject에 처음 액세스할 때, 원격 응용 프로그램에 프록시가 전달됩니다. 프록시에서 다음에 수행되는 호출은 로컬 응용 프로그램 도메인에 있는 개체로 다시 마샬링됩니다.

형식이 응용 프로그램 도메인 경계를 넘어 사용될 때 MarshalByRefObject에서 상속되어야 하며, 개체의 멤버는 자신이 만들어진 응용 프로그램 도메인 외부에서 사용할 수 없으므로 개체의 상태는 복사되면 안됩니다.

예제

다음 샘플에서는 나중에 원격으로 사용되는 MarshalByRefObject에서 파생된 클래스를 보여 줍니다.

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.Object
  System.MarshalByRefObject
     파생 클래스

스레드로부터의 안전성

이 형식의 모든 public static(Visual Basic의 경우 Shared) 멤버는 스레드로부터 안전합니다. 인터페이스 멤버는 스레드로부터 안전하지 않습니다.

플랫폼

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework에서 모든 플래폼의 모든 버전을 지원하지는 않습니다. 지원되는 버전의 목록은 시스템 요구 사항을 참조하십시오.

버전 정보

.NET Framework

2.0, 1.1, 1.0에서 지원

.NET Compact Framework

2.0, 1.0에서 지원

참고 항목

참조

MarshalByRefObject 멤버
System 네임스페이스