MarshalByRefObject クラス

リモート処理をサポートするアプリケーションで、アプリケーション ドメイン境界を超えてオブジェクトにアクセスできるようにします。

この型のすべてのメンバの一覧については、MarshalByRefObject メンバ を参照してください。

System.Object
   System.MarshalByRefObject
      派生クラス

<Serializable>
MustInherit Public Class MarshalByRefObject
[C#]
[Serializable]
public abstract class MarshalByRefObject
[C++]
[Serializable]
public __gc __abstract class MarshalByRefObject
[JScript]
public
   Serializable
abstract class MarshalByRefObject

スレッドセーフ

この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。

解説

アプリケーション ドメインとは、1 つ以上のアプリケーションが常駐するオペレーティング システム プロセスのパーティションです。同一のアプリケーション ドメインのオブジェクトは直接通信します。異なるアプリケーション ドメインのオブジェクトは、アプリケーション ドメインの境界を越えてオブジェクトのコピーを転送するか、メッセージを交換するためにプロキシを使用することにより通信します。

MarshalByRefObject は、プロキシを使用してメッセージを交換することにより、アプリケーション ドメインの境界を越えて通信するオブジェクトの基本クラスです。 MarshalByRefObject から継承されないオブジェクトは、暗黙的に値渡しでマーシャリングされます。リモート アプリケーションが値渡しのオブジェクトを参照する場合、そのオブジェクトのコピーがアプリケーション ドメイン境界を越えて渡されます。

MarshalByRefObject オブジェクトは、ローカル アプリケーション ドメインの境界内では直接アクセスできます。リモート アプリケーション ドメインのアプリケーションが初めて MarshalByRefObject にアクセスするときに、プロキシはそのリモート アプリケーションに渡されます。プロキシでの以降の呼び出しは、ローカル アプリケーション ドメインに常駐するオブジェクトにマーシャリングされます。

アプリケーション ドメインの境界を越えて使用する型は MarshalByRefObject から継承する必要があります。そのメンバが作成されたアプリケーション ドメイン外では同メンバを使用できないため、オブジェクトの状態をコピーできません。

使用例

[Visual Basic, C#, C++] 後でリモート処理で使用される MarshalByRefObject から派生したクラスを、次の例に示します。

 
Imports System
Imports System.Runtime.Remoting

Public Class SetObjectUriForMarshalTest
    
    Class TestClass
        Inherits MarshalByRefObject
    End Class

    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

[C#] 
using System;
using System.Runtime.Remoting;

public class SetObjectUriForMarshalTest  {

    class TestClass : MarshalByRefObject {
    }

    public static void Main()  {

        TestClass obj = new TestClass();    

        RemotingServices.SetObjectUriForMarshal(obj, "testUri");
        RemotingServices.Marshal(obj);

        Console.WriteLine(RemotingServices.GetObjectUri(obj));
    }
}

[C++] 
#using <mscorlib.dll>

using namespace System;
using namespace System::Runtime::Remoting;

public __gc class SetObjectUriForMarshalTest
{
public:
    __gc class TestClass : public MarshalByRefObject
    {
    };

    public:
        static void Main() 
        {
            TestClass * obj = new TestClass();    

            RemotingServices::SetObjectUriForMarshal(obj, "testUri");
            RemotingServices::Marshal(obj);

            Console::WriteLine(RemotingServices::GetObjectUri(obj));
    }
};

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

名前空間: System

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET

アセンブリ: Mscorlib (Mscorlib.dll 内)

参照

MarshalByRefObject メンバ | System 名前空間