2009-07-23 12 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に入れることはコンパイルされません。


注:私は自分の質問に答えるつもりですが、その情報をサイトに持たせると便利かもしれません。

FAQ:それはあなた自身の質問をし、答えるためにも完全に大丈夫ですが、あなたはJeopardy状態にしているふり:質問の形でフレーズを。

答えて

25

あなたはevent[NonSerialized]属性の一部として「field:」を含める必要があります。

すなわち:

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

感謝。しかし、それはなぜですか? –

+0

System.NonSerializedAttributeには制約があるからです:フィールドにしか適用できません! – Grubl3r

関連する問題