イベントに NonSerialized 属性を付ける
イベントを含んだクラスをシリアル化しようとして、イベントはシリアル化いらねと思ったら、これが簡単にできなくて大変だった。
[NonSerialized] public event EventHandler OnChanged;
素直にこう書いたら、「エラー CS0592: 属性 'NonSerialized' は、この種の宣言では無効です。'field' の宣言でのみ有効です。」と言われた。
あ〜でもないこ〜でもないといろいろ試した後、ネットで解決策発見。
http://piehead.livejournal.com/225258.html より引用。
[NonSerialized] private EventHandler myEvent; public event EventHandler MyEvent { add { myEvent+= value; } remove { myEvent-= value; } }
これでできた!なるほど。
でもこれ、C#を改善したほうがよくない?イベントをシリアル化することってある?