2009-07-23 15 views
14

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.

Respuesta

25

tiene que incluir "field:" como parte del atributo [NonSerialized] en el event.

es decir .:

[field: NonSerialized] 
public event EventHandler Roar; 
+0

Gracias. Pero ¿por qué es eso? –

+0

Es porque System.NonSerializedAttribute tiene una restricción: ¡solo se puede aplicar a los campos! – Grubl3r

Cuestiones relacionadas