MarshalByRefObject Klasse
TOC
Inhaltsverzeichnis reduzieren
Inhaltsverzeichnis erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

MarshalByRefObject-Klasse

 

Aktiviert in Anwendungen mit Remotingunterstützung den Zugriff auf Objekte über die Grenzen von Anwendungsdomänen hinweg.

Namespace:   System
Assembly:  mscorlib (in 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.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

NameBeschreibung
System_CAPS_protmethodMarshalByRefObject()

Initialisiert eine neue Instanz der MarshalByRefObject-Klasse.

NameBeschreibung
System_CAPS_pubmethodCreateObjRef(Type)

Erstellt ein Objekt mit allen relevanten Informationen, die zum Generieren eines Proxys für die Kommunikation mit einem Remoteobjekt erforderlich sind.

System_CAPS_pubmethodEquals(Object)

Bestimmt, ob das angegebene Objekt mit dem aktuellen Objekt identisch ist.(Geerbt von Object.)

System_CAPS_protmethodFinalize()

Gibt einem Objekt Gelegenheit, Ressourcen freizugeben und andere Bereinigungen durchzuführen, bevor es von der Garbage Collection freigegeben wird. (Geerbt von Object.)

System_CAPS_pubmethodGetHashCode()

Fungiert als die Standardhashfunktion. (Geerbt von Object.)

System_CAPS_pubmethodGetLifetimeService()

Ruft das aktuelle Lebensdauerdienstobjekt ab, das die Lebensdauerrichtlinien für diese Instanz steuert.

System_CAPS_pubmethodGetType()

Ruft den Type der aktuellen Instanz ab.(Geerbt von Object.)

System_CAPS_pubmethodInitializeLifetimeService()

Ruft ein Lebensdauerdienstobjekt ab, mit dem die Lebensdauerrichtlinien für diese Instanz gesteuert werden können.

System_CAPS_protmethodMemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.(Geerbt von Object.)

System_CAPS_protmethodMemberwiseClone(Boolean)

Erstellt eine flache Kopie des aktuellen MarshalByRefObject-Objekts.

System_CAPS_pubmethodToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.(Geerbt von Object.)

Eine Anwendungsdomäne ist ein Teil eines Betriebssystemprozesses, der eine oder mehrere Anwendungen enthält.Objekte in derselben Anwendungsdomäne kommunizieren direkt miteinander.Objekte in unterschiedlichen Anwendungsdomänen kommunizieren entweder durch die Übertragung von Objektkopien über die Grenzen von Anwendungsdomänen hinweg oder durch den Austausch von Meldungen über einen Proxy.

MarshalByRefObject ist die Basisklasse für Objekte, die über Grenzen von Anwendungsdomänen hinweg durch den Austausch von Meldungen über einen Proxy kommunizieren.Objekte, die nicht von MarshalByRefObject erben, werden implizit als Wert gemarshallt.Wenn eine Remoteanwendung auf ein Objekt verweist, das als Wert gemarshallt wird, wird eine Kopie des Objekts über die Grenze der Anwendungsdomäne hinweg übergeben.

Auf MarshalByRefObject-Objekte wird direkt innerhalb der Grenzen der lokalen Anwendungsdomäne zugegriffen.Wenn eine Anwendung in einer Remoteanwendungsdomäne zum ersten Mal auf ein MarshalByRefObject zugreift, wird der Remoteanwendung ein Proxy übergeben.Nachfolgende Aufrufe des Proxys werden zurück an das in der lokalen Anwendungsdomäne befindliche Objekt gemarshallt.

Typen müssen von MarshalByRefObject erben, wenn sie über Anwendungsdomänen hinweg verwendet werden und der Zustand des Objekts nicht kopiert werden darf, da die Member des Objekts nicht außerhalb der Anwendungsdomäne, in der sie erstellt worden sind, verwendet werden können.

Dieser Abschnitt enthält zwei Codebeispiele.Das erste Codebeispiel zeigt, wie eine Instanz einer Klasse in einer anderen Anwendungsdomäne erstellt wird.Im zweiten Codebeispiel wird eine einfache Klasse gezeigt, die für Remoting verwendet werden kann.

Beispiel 1

Im folgenden Codebeispiel wird die einfachste Möglichkeit veranschaulicht, Code in einer anderen Anwendungsdomäne auszuführen.Im Beispiel wird eine Klasse mit dem Namen Worker definiert, die MarshalByRefObject erbt. Die Klasse enthält eine Methode, mit der der Name der Anwendungsdomäne angezeigt werden kann, in der die Klasse ausgeführt wird.Im Beispiel werden Instanzen von Worker in der Standardanwendungsdomäne und in einer neuen Anwendungsdomäne erstellt.

System_CAPS_noteHinweis

Die Assembly, die Worker enthält, muss in beide Anwendungsdomänen geladen werden. Die Assembly selbst kann jedoch weitere Assemblys laden, die dann nur in der neuen Anwendungsdomäne vorhanden sind.

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"
 */

Beispiel 2

Im folgenden Beispiel wird eine von MarshalByRefObject abgeleitete Klasse veranschaulicht, die später für Remoting verwendet wird.

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
Verfügbar seit 1.1

Öffentliche statische (in Visual Basic freigegebene) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Zurück zum Anfang
Anzeigen:
© 2016 Microsoft