本文為機器翻譯文章。如需檢視英文版,請選取 [原文] 核取方塊。您也可以將滑鼠指標移到文字上,即可在快顯視窗顯示英文原文。
譯文
原文

MarshalByRefObject 類別

 

在支援遠端處理的應用程式中啟用跨應用程式定義域界限存取物件。

命名空間:   System
組件:  mscorlib (於 mscorlib.dll)

System.Object
  System.MarshalByRefObject
    Microsoft.Build.Utilities.AppDomainIsolatedTask
    Microsoft.Build.Utilities.TaskItem
    Microsoft.Build.Utilities.TaskLoggingHelper
    Microsoft.Win32.RegistryKey
    System.AddIn.Pipeline.ContractBase
    System.AppDomain
    System.AppDomainManager
    System.ComponentModel.Component
    System.ContextBoundObject
    System.Data.Common.DataColumnMapping
    System.Data.Common.DataColumnMappingCollection
    System.Data.Common.DataTableMapping
    System.Data.Common.DataTableMappingCollection
    System.Data.Common.DbDataReader
    System.Data.Common.DbParameter
    System.Data.Common.DbParameterCollection
    System.Data.Common.DbTransaction
    System.Diagnostics.TraceListener
    System.DirectoryServices.SearchResultCollection
    System.Drawing.Brush
    System.Drawing.Drawing2D.CustomLineCap
    System.Drawing.Drawing2D.GraphicsContainer
    System.Drawing.Drawing2D.GraphicsPath
    System.Drawing.Drawing2D.GraphicsPathIterator
    System.Drawing.Drawing2D.GraphicsState
    System.Drawing.Drawing2D.Matrix
    System.Drawing.Font
    System.Drawing.FontFamily
    System.Drawing.Graphics
    System.Drawing.Icon
    System.Drawing.Image
    System.Drawing.Pen
    System.Drawing.Region
    System.Drawing.StringFormat
    System.EnterpriseServices.Internal.AssemblyLocator
    System.EnterpriseServices.RegistrationHelper
    System.IO.FileSystemInfo
    System.IO.IsolatedStorage.IsolatedStorage
    System.IO.Stream
    System.IO.TextReader
    System.IO.TextWriter
    System.Messaging.MessageEnumerator
    System.Messaging.MessageQueueEnumerator
    System.Net.WebRequest
    System.Net.WebResponse
    System.Reflection.AssemblyNameProxy
    System.Runtime.InteropServices.StandardOleMarshalObject
    System.Runtime.Remoting.Lifetime.ClientSponsor
    System.Runtime.Remoting.ObjectHandle
    System.Speech.Recognition.SrgsGrammar.SrgsElement
    System.Threading.RegisteredWaitHandle
    System.Threading.Timer
    System.Threading.WaitHandle
    System.Web.Compilation.ClientBuildManager
    System.Web.Compilation.ClientBuildManagerCallback
    System.Web.Hosting.AppDomainProtocolHandler
    System.Web.Hosting.ApplicationManager
    System.Web.Hosting.HostingEnvironment
    System.Web.Hosting.ISAPIRuntime
    System.Web.Hosting.ProcessHost
    System.Web.Hosting.ProcessHostFactoryHelper
    System.Web.Hosting.ProcessProtocolHandler
    System.Web.Hosting.RecycleLimitMonitor
    System.Web.Hosting.RecycleLimitMonitor.RecycleLimitMonitorSingleton
    System.Web.Hosting.VirtualFileBase
    System.Web.Hosting.VirtualPathProvider
    System.Windows.Forms.BaseCollection
    System.Windows.Forms.NativeWindow
    System.Windows.Forms.NumericUpDownAccelerationCollection
    System.Windows.Forms.OwnerDrawPropertyBag
    System.Windows.Forms.TreeNode
    System.Windows.Interop.DocObjHost
    System.Workflow.Runtime.DebugEngine.DebugController

[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class MarshalByRefObject

名稱描述
System_CAPS_protmethodMarshalByRefObject()

初始化 MarshalByRefObject 類別的新執行個體。

名稱描述
System_CAPS_pubmethodCreateObjRef(Type)

建立物件,包含要產生 proxy 用來與遠端物件通訊所需的所有相關資訊。

System_CAPS_pubmethodEquals(Object)

判斷指定的物件是否等於目前的物件。(繼承自 Object。)

System_CAPS_protmethodFinalize()

允許物件在記憶體回收進行回收之前,嘗試釋放資源並執行其他清除作業。 (繼承自 Object。)

System_CAPS_pubmethodGetHashCode()

做為預設雜湊函式。(繼承自 Object。)

System_CAPS_pubmethodGetLifetimeService()

擷取目前存留期間的服務物件可控制這個執行個體的存留期原則。

System_CAPS_pubmethodGetType()

取得目前執行個體的 Type(繼承自 Object。)

System_CAPS_pubmethodInitializeLifetimeService()

取得存留期服務物件,以控制這個執行個體的存留期原則。

System_CAPS_protmethodMemberwiseClone()

建立目前 Object 的淺層複製。(繼承自 Object。)

System_CAPS_protmethodMemberwiseClone(Boolean)

建立目前的淺層複本MarshalByRefObject物件。

System_CAPS_pubmethodToString()

傳回代表目前物件的字串。(繼承自 Object。)

應用程式網域是一個或多個應用程式所在的作業系統處理程序中的分割區。 相同的應用程式定義域中的物件直接通訊。 不同的應用程式定義域中物件通訊跨應用程式網域界限,傳輸物件的複本,或使用 proxy 來交換訊息。

MarshalByRefObject正在交換訊息來跨應用程式定義域界限進行通訊的物件的基底類別使用的 proxy。 物件,不會繼承自MarshalByRefObject會隱含地封送處理的值。 當遠端應用程式參考封送處理的值物件時,應用程式定義域界限之間傳遞物件的複本。

MarshalByRefObject直接在本機應用程式定義域界限內存取的物件。 在遠端的應用程式第一次會存取應用程式定義域MarshalByRefObject,proxy 會傳遞至遠端應用程式。 在 proxy 上的後續呼叫會封送處理回位於本機應用程式定義域中的物件。

類型必須繼承自MarshalByRefObject當跨應用程式定義域界限使用的型別,且必須複製物件的狀態,因為物件的成員不會外當初建立它們的應用程式定義域使用。

當您從物件所衍生MarshalByRefObject跨應用程式定義域界限使用,您不應覆寫它的任何成員,也不應該在直接呼叫其方法。 執行階段會辨識類別衍生自MarshalByRefObject應該封送處理跨應用程式定義域界限。

本節包含兩個程式碼範例。 第一個程式碼範例示範如何在其他應用程式定義域中建立類別的執行個體。 第二個程式碼範例顯示簡單的類別,可用於遠端處理。

範例 1

下列程式碼範例示範最簡單的方式,另一個應用程式定義域中執行程式碼。 此範例會定義名為類別Worker繼承MarshalByRefObject,顯示它正在執行的應用程式定義域名稱的方法。 此範例會建立的執行個體Worker在預設應用程式定義域和新的應用程式定義域中。

System_CAPS_note注意

包含的組件Worker必須載入到兩個應用程式定義域,但它無法載入會只存在於新的應用程式定義域的其他組件。

using System;
using System.Reflection;

public class Worker : MarshalByRefObject
{
    public void PrintDomain() 
    { 
        Console.WriteLine("Object is executing in AppDomain \"{0}\"",
            AppDomain.CurrentDomain.FriendlyName); 
    }
}

class Example
{
    public static void Main()
    {
        // Create an ordinary instance in the current AppDomain
        Worker localWorker = new Worker();
        localWorker.PrintDomain();

        // Create a new application domain, create an instance
        // of Worker in the application domain, and execute code
        // there.
        AppDomain ad = AppDomain.CreateDomain("New domain");
        Worker remoteWorker = (Worker) ad.CreateInstanceAndUnwrap(
            typeof(Worker).Assembly.FullName,
            "Worker");
        remoteWorker.PrintDomain();
    }
}

/* This code produces output similar to the following:

Object is executing in AppDomain "source.exe"
Object is executing in AppDomain "New domain"
 */

範例 2

下列範例會示範衍生自類別MarshalByRefObject也就是在稍後使用的遠端執行功能。

using System;
using System.Runtime.Remoting;
using System.Security.Permissions;

public class SetObjectUriForMarshalTest  {

    class TestClass : MarshalByRefObject {
    }

    [SecurityPermission(SecurityAction.Demand, Flags=SecurityPermissionFlag.RemotingConfiguration)] 
    public static void Main()  {

        TestClass obj = new TestClass();    

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

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

.NET Framework
自 1.1 起供應

此類型的任何 public static (在 Visual Basic 中 共用 在 Visual Basic 中) 成員皆為安全執行緒。不保證任何執行個體成員為安全執行緒。

回到頁首
顯示: