2011-06-06 26 views
0

一個非常簡單的問題...序列化事件是否正確? (應用DataMember屬性)

DataMember屬性應用於事件或委託以讓其序列化是否正確?

考慮一下,我想這一點:

1)好了,委託類型的基礎上,其他類型的,所以只要這些類型都是可序列化本身沒有必要(不正確),以序列化委託。

2)鑑於一個事件是基於一個委託,並且委託(因爲在1中說了什麼)不需要直接序列化,所以我假設一個事件不需要被標記爲可序列化。

所以,我的問題是:

是否正確運用系列化屬性的事件和delagates?

如果答案是「否!不需要使它們可序列化」,是1)和2)是否正確?

另一個問題:開發人員需要將類中的哪些元素標記爲可序列化(使用DataMember)?

謝謝

+1

假設您序列化委託並在其他計算機上反序列化它。如果你試圖調用反序列化的委託,你期望會發生什麼? – Gabe 2011-06-06 12:44:13

+0

@Gabe是的,你說得對,我已經問過我自己,,,只是想確定:) – Andry 2011-06-06 12:49:02

回答

3

不,這是不正確的。 DataMember只能在屬性或字段被施加 - 由AttributeTargets定義:

[AttributeUsageAttribute(AttributeTargets.Property|AttributeTargets.Field, 
    Inherited = false, AllowMultiple = false)] 
public sealed class DataMemberAttribute : Attribute 
{ ... } 

AttributeTargets具有用於EnumDelegate單獨的值。

分佈式系統中的序列化委託或事件沒有意義。您正在以可互操作的格式傳遞數據。消息只能包含數據。沒有什麼可以描述代表(面向對象的指向生活在你的進程內存中的方法的指針)或事件(觸發代表你的進程內存的代表)。

如果您希望在客戶端上有數據協定的事件,您必須與服務和客戶端之間的協議共享程序集。在這種情況下,雙方將具有相同的類型(包括所有事件,方法,只讀屬性等),並且它們將只傳輸存儲在類型實例中的數據。

相關問題