16

次のクラスが でシリアル化されると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..
    }
}

Lion で始まるオブジェクト グラフの一部としてイベント サブスクライバーがシリアル化されるのをどのように停止しますか?

[NonSerializable]属性を配置するeventと、コンパイルされません。


注:サイトに情報があると役立つと思うので、私は自分の質問に答えています!

FAQ: 自分で質問して答えるのもまったく問題ありませんが、Jeopardy に参加しているふりをして、質問の形で表現してください。

4

1 に答える 1

30

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

すなわち:

[field: NonSerialized]
public event EventHandler Roar;
于 2009-07-23T18:34:42.010 に答える