16

当使用 a 序列化以下类时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不会编译。


注意:我正在回答我自己的问题,因为我认为在网站上提供这些信息可能会很有用!

常见问题解答:问和回答你自己的问题也很好,但假装你在危险中:以问题的形式表达它。

4

1 回答 1

30

您必须将“ field:”作为[NonSerialized]属性的一部分包含在event.

IE:

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