visual tiempo manejo lista eventos evento ejecucion deshabilitar definidos crear comunes c#

c# - tiempo - lista de eventos en visual basic



¿Pueden los eventos declararse como estáticos? Si es así, ¿cómo y por qué? (4)

Puede crear eventos estáticos. Los usa de la misma manera que un evento normal, excepto que se usa en un contexto estático dentro de la clase.

public class MyClass { public static event EventHandler MyEvent; private static void RaiseEvent() { var handler = MyEvent; if (handler != null) handler(typeof(MyClass), EventArgs.Empty); } }

Dicho esto, hay muchos problemas con los eventos estáticos. Debe tener especial cuidado para anular la suscripción de sus objetos a eventos estáticos, ya que la suscripción a un evento estático enraizará su instancia de suscripción y evitará que el recolector de basura la recopile.

Además, he descubierto que en la mayoría de los casos en los que me gustaría hacer eventos estáticos, tiendo a aprender a usar un evento estándar en Singleton . Esto maneja los mismos escenarios que un evento estático, pero es (IMO) más obvio que se está suscribiendo a una instancia de nivel "global".

Quiero saber si podemos declarar los eventos como estáticos si es así por qué y la aplicación de dicha declaración.

Muestra por favor como ver es creer


Sí tu puedes. Consulte, por ejemplo, Application.ApplicationExit . Sin embargo, tenga en cuenta que las advertencias en esa página sobre fugas de memoria cuando se conecta a eventos estáticos; eso se aplica a todos los eventos estáticos.

No hay nada de mágico cuando los utilizas: cuando necesitas proporcionar un evento para una clase estática o un evento que trata exclusivamente con datos estáticos y tiene sentido implementarlo de esta manera.


Sí, puedes declarar un evento como estático. Los usa de la misma manera que los usaría si fueran eventos de instancia, pero accede al nombre del evento de una manera estática (es decir, ClassName.EventName , en lugar de variableName.EventName ).

Ahora ... ¿ quieres eventos estáticos? Eso es muy discutible. Yo personalmente diría que no, ya que todo lo estático crea dificultades en las pruebas y, por lo tanto, debe evitarse siempre que sea posible.

Pero ciertamente es posible.


public delegate void SomeEventDelegate(); public class SomeClass { public static event SomeEventDelegate SomeEvent; }