İngilizce dilinde oku

Aracılığıyla paylaş


MarshalByRefObject Sınıf

Tanım

Uzaktan iletişim desteği olan uygulamalarda uygulama etki alanı sınırları genelinde nesnelere erişimi etkinleştirir.

C#
public abstract class MarshalByRefObject
C#
[System.Serializable]
public abstract class MarshalByRefObject
C#
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class MarshalByRefObject
Devralma
MarshalByRefObject
Türetilmiş
Öznitelikler

Örnekler

Bu bölüm iki kod örneği içerir. İlk kod örneği, başka bir uygulama etki alanında bir sınıfın örneğinin nasıl oluşturulacağını gösterir. İkinci kod örneği uzaktan iletişim için kullanılabilecek basit bir sınıfı gösterir.

Örnek 1

Aşağıdaki kod örneği, kodu başka bir uygulama etki alanında yürütmenin en basit yolunu gösterir. Örnek, yürütülmekte olduğu uygulama etki alanının adını görüntüleyen bir yöntemle öğesini devralan MarshalByRefObjectadlı Worker bir sınıf tanımlar. Örnek, varsayılan uygulama etki alanında ve yeni bir uygulama etki alanında örneklerini Worker oluşturur.

Not

içeren Worker derlemenin her iki uygulama etki alanına da yüklenmesi gerekir, ancak yalnızca yeni uygulama etki alanında mevcut olan diğer derlemeleri yükleyebilir.

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

Örnek 2

Aşağıdaki örnek, daha sonra uzaktan iletişimde kullanılan öğesinden MarshalByRefObject türetilmiş bir sınıfı gösterir.

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));
    }
}

Açıklamalar

Uygulama etki alanı, bir veya daha fazla uygulamanın bulunduğu bir işletim sistemi işlemindeki bölümdür. Aynı uygulama etki alanındaki nesneler doğrudan iletişim kurar. Farklı uygulama etki alanlarındaki nesneler, nesnelerin kopyalarını uygulama etki alanı sınırları arasında taşıyarak veya ileti alışverişi için ara sunucu kullanarak iletişim kurar.

MarshalByRefObject , bir ara sunucu kullanarak iletileri değiştirerek uygulama etki alanı sınırları arasında iletişim kuran nesnelerin temel sınıfıdır. 'den MarshalByRefObject devralmayan nesneler, değere göre örtük olarak sıralar. Uzak uygulama değere göre hazırlama nesnesine başvurduğunda, nesnenin bir kopyası uygulama etki alanı sınırları arasında geçirilir.

MarshalByRefObject nesnelerine doğrudan yerel uygulama etki alanının sınırları içinde erişilir. Uzak uygulama etki alanındaki bir uygulama ilk kez bir MarshalByRefObjectöğesine eriştiğinde, uzak uygulamaya bir ara sunucu geçirilir. Proxy'deki sonraki çağrılar, yerel uygulama etki alanında bulunan nesneye geri sıralanır.

Türün uygulama etki alanı sınırları arasında kullanıldığı ve nesnenin üyeleri oluşturuldukları uygulama etki alanı dışında kullanılamadığından, türlerin öğesinden MarshalByRefObject devralınması gerekir ve nesnenin durumu kopyalanmamalıdır.

Uygulama etki alanı sınırları arasında kullanmak üzere öğesinden MarshalByRefObject bir nesne türetdiğinizde, üyelerinden hiçbirini geçersiz kılmamalısınız ve yöntemlerini doğrudan çağırmamalısınız. Çalışma zamanı, türetilen MarshalByRefObject sınıfların uygulama etki alanı sınırları arasında sıralanması gerektiğini tanır.

Oluşturucular

MarshalByRefObject()

MarshalByRefObject sınıfının yeni bir örneğini başlatır.

Yöntemler

CreateObjRef(Type)

Uzak bir nesneyle iletişim kurmak için kullanılan bir ara sunucu oluşturmak için gereken tüm ilgili bilgileri içeren bir nesne oluşturur.

Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

(Devralındığı yer: Object)
GetHashCode()

Varsayılan karma işlevi işlevi görür.

(Devralındığı yer: Object)
GetLifetimeService()
Kullanımdan kalktı.

Bu örnek için yaşam süresi ilkesini denetleen geçerli yaşam süresi hizmet nesnesini alır.

GetType()

Type Geçerli örneğini alır.

(Devralındığı yer: Object)
InitializeLifetimeService()
Kullanımdan kalktı.

Bu örneğin yaşam süresi ilkesini denetlemek için bir yaşam süresi hizmet nesnesi alır.

MemberwiseClone()

Geçerli Objectöğesinin sığ bir kopyasını oluşturur.

(Devralındığı yer: Object)
MemberwiseClone(Boolean)

Geçerli MarshalByRefObject nesnenin sığ bir kopyasını oluşturur.

ToString()

Geçerli nesneyi temsil eden dizeyi döndürür.

(Devralındığı yer: Object)

Şunlara uygulanır

Ürün Sürümler
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 2.0, 2.1