2011-06-06 52 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单独的值。

分布式系统中的序列化委托或事件没有意义。您正在以可互操作的格式传递数据。消息只能包含数据。没有什么可以描述代表(面向对象的指向生活在你的进程内存中的方法的指针)或事件(触发代表你的进程内存的代表)。

如果您希望在客户端上有数据协定的事件,您必须与服务和客户端之间的协议共享程序集。在这种情况下,双方将具有相同的类型(包括所有事件,方法,只读属性等),并且它们将只传输存储在类型实例中的数据。

相关问题