Isidro Padilla

Isidro Padilla

  • 1.3k
  • 319
  • 19k

Error CS0079 relative to delegates and events

Jan 12 2018 3:59 AM
A ver si me pueden ayudar porque aunque he buscado informaión y
 
se que el error está relacionado con la forma de la utilización
 
de delegados, estoy aprendiendo y mi nivel da para más.
 
El error que me lanza es este:
 
Error CS0079: El evento 'AssemblyManager.AssemblyUnloaded'
solo puede aparecer a la izquierda de += o -=.
¿Cuál es el cambio que debo hacer para que "AssemblyUnloaded"
 
no me arroje este error?
 
Código:
 
public event EventHandler<AssemblyEventArgs> AssemblyUnloaded
{
[MethodImpl(MethodImplOptions.Synchronized)]
add
{
AssemblyUnloaded += (EventHandler<AssemblyEventArgs>)Delegate.Combine(AssemblyUnloaded, value);
}
[MethodImpl(MethodImplOptions.Synchronized)]
remove
{
AssemblyUnloaded -= (EventHandler<AssemblyEventArgs>)Delegate.Remove( AssemblyUnloaded, value);
}
}
 
He encontrado ejemplos de solución como este que añado a continuación, pero no se aplicarlo al este caso concreeto.
 
Error CS0079
 
Su edición muestra una llamada recursiva: está declarando un evento personalizado, lo que significa que debe proporcionar un campo de respaldo; por ejemplo:
 
private EventHandler customEvent;
evento público estático EventHandler CustomEvent
{
agregar {customEvent + = valor; }
eliminar {customEvent - = valor; }
}
vacío estático privado Func ()
{
var tmp = customEvent;
if (tmp! = null) tmp (null, null);
}
 
Tenga en cuenta que en Func me refiero al campo (customEvent), no al evento (CustomEvent).
 
Sin embargo, esto es más simple, son mejores (thread-safe) como un evento de tipo campo:
 
evento estático público EventHandler CustomEvent;
 
vacío estático privado Func ()
{
var tmp = CustomEvent;
if (tmp! = null) tmp (null, null);
}
 
Un evento de tipo campo utiliza la palabra clave de evento, pero omite los accesos: el compilador agrega una gran cantidad de texto repetitivo para usted (un campo de respaldo y implementaciones de agregar / quitar hilos seguros). Además, permite el acceso al respaldo archivado a través del nombre del evento (del tipo declarante), de ahí que la línea var tmp = CustomEvent funciona.
 
Además: tenga mucho cuidado con los eventos estáticos; son una excelente manera de mantener accidentalmente muchos objetos vivos.
 
Les estaré muy agradecido por la ayuda que me puedan prestar. 

Answers (4)