2009-07-23 37 views
14

当以下类与BinaryFormatter序列化时,订阅Roar事件的任何对象也将被序列化,因为对这些对象的引用由EventHandler委托保存。如何在序列化对象时忽略事件订阅者?

[Serializable] 
public class Lion 
{ 
    public event EventHandler Roar; 

    public string Name { get; set; } 
    public float Fluffiness { get; set; } 

    public Lion(string name, float fluffiness) 
    { 
     Name = name; 
     Fluffiness = fluffiness; 
    } 

    public void Poke() 
    { 
     Roar(); // Could be null, etc.. 
    } 
} 

你将如何阻止事件的用户正在连载的开始与狮子对象图的一部分?

[NonSerializable]属性放在event上将不会编译。


注:我回答我自己的问题,因为我认为它可能是有用的网站上的信息!

常问问题:询问并回答自己的问题也是完全正确的,但假装你在危险之中:以问题的形式表述它。

回答

25

你必须包括“field:”作为对event[NonSerialized]属性的一部分。

即:

[field: NonSerialized] 
public event EventHandler Roar; 
+0

感谢。但为什么呢? – 2014-02-17 14:26:24