關於跨應用程式域邊界的物件訪問

2021-08-22 09:47:32 字數 781 閱讀 1259

乙個應用程式域可以通過兩種方式和另乙個應用程式域進行通訊。一種是傳值(by value),另一種是傳引用(by reference)

傳值是通過物件的序列和反序列實現的,因此要傳遞的物件必須有system.serializable屬性.

它的實現原理:我們在應用程式域a中構造了乙個物件a1,現在要將物件a1的引用傳遞給另

乙個應用程式域b,clr首先會將物件a1的字段序列化到乙個記憶體塊,然後再將這個記憶體塊的位址

傳遞給另一應用程式域b,將由應用程式域b反序列化得對新的物件b1,因此這個新的物件b1應該是在

應用程式域a中。

可以通過以下**來證實:

using system;

using system.reflection;

using system.threading;

using system.runtime.serialization;

而傳引用則能過建立**物件來實現,傳遞的物件要從system.marshalbyrefobject類繼承。

當物件的引用傳遞到另一應用程式域中時,clr會在目的應用程式域中建立乙個**物件,

目的應用程式域中引用的將是這個**物件,它通過**物件來呼叫源應用程式域中的物件。

由於它實際上呼叫的還是源應用程式域中的物件,因此執行緒要在兩個應用程式域中跳轉。

(參見.net框架程式設計(修訂版)p514

)可以修改上面test類部分**來證實:

// [serializable]

class test : marshalbyrefobject

關於跨應用程式域邊界的物件訪問 zz

zzfrom 乙個應用程式域可以通過兩種方式和另乙個應用程式域進行通訊。一種是傳值 by value 另一種是傳引用 by reference 傳值是通過物件的序列和反序列實現的,因此要傳遞的物件必須有system.serializable屬性.它的實現原理 我們在應用程式域a中構造了乙個物件a1,...

翻譯 應用程式池和應用程式域的區別

應用程式域是asp.net的概念,它為每個asp.net應用程式提供隔離。應用程式池是iis的概念,它提供在程序級別的隔離。應用程式域僅對asp.net應用程式可用。應用程式池對asp.net和非asp.net應用程式都可用。每個asp.net應用程式有它自己的應用程式域。乙個應用程式池可以被多個應...

翻譯 應用程式池和應用程式域的區別

應用程式域是asp.net的概念,它為每個asp.net應用程式提供隔離。應用程式池是iis的概念,它提供在程序級別的隔離。應用程式域僅對asp.net應用程式可用。應用程式池對asp.net和非asp.net應用程式都可用。每個asp.net應用程式有它自己的應用程式域。乙個應用程式池可以被多個應...