Cuando la siguiente clase se serializa con un BinaryFormatter
, los objetos que se suscriban al evento Roar
también se serializarán, ya que el delegado de EventHandler mantiene las referencias a esos objetos.¿Cómo ignoro los suscriptores de eventos al serializar un objeto?
[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..
}
}
¿Cómo dejar de suscriptores de eventos por entregas como parte del gráfico de objetos a partir de un León?
Poniendo el atributo [NonSerializable]
en el event
no se compilará.
Nota: ¡Estoy respondiendo mi propia pregunta ya que creo que podría ser útil tener la información en el sitio!
Preguntas frecuentes: también está perfectamente bien hacer y responder su propia pregunta, pero pretenda que está en Jeopardy: fraseela en forma de pregunta.
Gracias. Pero ¿por qué es eso? –
Es porque System.NonSerializedAttribute tiene una restricción: ¡solo se puede aplicar a los campos! – Grubl3r