tengo el siguiente código:C# - funciones anónimas y controladores de eventos
public List<IWFResourceInstance> FindStepsByType(IWFResource res)
{
List<IWFResourceInstance> retval = new List<IWFResourceInstance>();
this.FoundStep += delegate(object sender, WalkerStepEventArgs e)
{
if (e.Step.ResourceType == res) retval.Add(e.Step);
};
this.Start();
return retval;
}
Observe cómo puedo registrar el miembro de evento (FoundStep) a función local en el lugar en el anonimato.
Mi pregunta es: cuando la función 'FindStepByType' termine, ¿se eliminará automáticamente la función anónima de la lista de delegados del evento o tendré que eliminarla manualmente antes de ejecutar la función? (¿y cómo lo hago?)
Espero que mi pregunta sea clara.
¿No es exactamente lo mismo que usar predicados? Cuando uso predicados, no libero al predicado predicado. –
Los predicados no se guardan en ningún lado, pero aquí, se está suscribiendo a un evento. Mientras el objeto que contiene el evento esté activo, mantendrá una referencia a su delegado e indirectamente a sus variables. Cuando pase diga, '.Where (x => x.Hidden)' a algún método, el método hará el trabajo con él y lo descartará (es solo una variable local en lo que respecta al método 'Where'. Esto no es cierto para su caso. Además, si 'Where' lo almacenó en alguna parte, también debería haberse preocupado por esto. –