2009-07-23 42 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