2010-04-15 33 views
0

是否可以轉儲/保存內存對象,以便轉儲包含狀態和方法,然後通過線路傳輸它。我主要使用C#,但如果這可以在其他技術中完成,那應該是好的。如何轉儲內存對象並將其傳輸?

+0

搜索「序列化」,您可以傳輸對象的狀態,但它的定義必須已經存在於主機上 – fabrizioM 2010-04-15 07:15:44

+0

序列化將只保存狀態,而不是方法。我的意圖是轉移一個完整的對象,以便接收者可以調用它知道的方法。接受者對該對象沒有任何其他的東西。序列化在這種情況下不會有幫助。 – Kapil 2010-04-15 07:27:35

+0

如何序列化數據,然後通過包含函數的程序集完成數據發送;​​-)這實際上就是您要求的。 – dnolan 2010-04-15 07:40:33

回答

1

「轉儲包含方法」,這將取決於語言和運行時間很多。

在典型的靜態類型OO語言中,對象的方法由其類型決定,因此只需要爲該類型發送標識符(假設接收方安裝了相同的代碼)。收件人僅實例化該類型的空白對象並使用接收的數據填充它。

「發送方法」可能意味着所有類型的事情:與收件人協商,看他們是否有某些程序集(編譯代碼),如果沒有,則發送它們(或告訴它從某處下載),然後發送數據用來實例化對象。自動執行此操作通常會帶來巨大的安全風險!因此它很少自動發生。

這實際上是一個Web服務器向您發送視頻的方式。如果您沒有所需的插件,它會讓您下載它,然後向您發送數據以實例化插件的一個實例。

使用JavaScript等非常動態的語言,代碼和數據之間的分工更加無縫。下面的聲明大致相當於一個方法的對象:

{ 
    counter: 5, 
    increment: function() { this.counter++; } 
} 

文本的這段代碼可以通過網絡發送出去,然後接收方可以使用eval把它變成一個實際的對象:

c.increment(); 
c.increment(); 

alert(c.counter); // displays 7 

同樣,這基本上是現代網頁的內容:聲明結構(HTML)和小塊可執行腳本的組合,它們通過互聯網發送。

相關問題