Ответ 1
Вы должны включить "field:
" как часть атрибута [NonSerialized]
в event
.
то есть:.
[field: NonSerialized]
public event EventHandler Roar;
Когда следующий класс сериализуется с 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
не будет компилироваться.
Примечание. Я отвечаю на свой вопрос, так как думаю, что было бы полезно иметь информацию на сайте!
Часто задаваемые вопросы: Также прекрасно спросить и ответить на собственный вопрос, но притворяйтесь, что вы находитесь под угрозой: произнесите его в форме вопроса.
Вы должны включить "field:
" как часть атрибута [NonSerialized]
в event
.
то есть:.
[field: NonSerialized]
public event EventHandler Roar;