2009-08-23 6 views
1

Je les utilise pour la "communication" entre différents objets, en tant qu'éditeur et modèle d'abonné.Délégués et événements

Est-ce quelques exemples que je vois que, parfois, l'événement est déclarée comme statique et parfois il n'est pas:

public delegate void LogProgress(string str) 
public static event LogProgress LogProgressEvent; 


if (LogProgressEvent != null) 
       LogProgressEvent(tempString); 

Pourquoi et quand je dois utiliser statique?

Répondre

8

Les événements statiques sont en fait assez dangereux, et (heureusement) également assez rares. Comme pour tout ce qui est statique, vous l'utiliserez quand il s'applique au type en général, pas à une instance spécifique. Et même alors, vous pourriez le voir sur une instance singleton plutôt que comme un événement statique.

Le danger est qu'il est ridiculement facile d'oublier de se désinscrire, et finissent par garder masses des objets vivants pour toujours; Contrairement à la plupart des événements basés sur des instances, l'instance finit généralement par être hors de portée, ce qui permet aux délégués d'être collectés (une instance de délégué gardera une instance cible en vie).

+0

Je dois toujours créer des événements NONE statiques, non? mais si je le fais, cela nécessitera que je crée une instance de la classe qui appelle l'événement comme: DataClass data = new DataClass(); data.LogProgressEvent + = new data.LogProgress (UpdateTextBox); – markiz

+0

Soyez prudent. Si vous ne vous abonnez que dans quelques endroits clés (infrastructure, etc.), vous devriez être OK; mais évitez de vous abonner à vos entités de données ('Person',' Order', etc) –

+0

mais si je continue à utiliser dans les objets "entités de données", le garbage collector ne nettoiera-t-il pas les dégâts après la disparition de cet objet? – markiz

0

statique appliqué aux événements ne diffère pas de l'application statique à tout autre champ C#.

Les événements statiques sont disponibles pour les appelants à tout moment, même si aucune instance de la classe n'existe. Je suppose que si vous voulez déclencher des événements à partir d'une méthode statique, les événements statiques seront utiles

Voir implications de l'utilisation des événements statiques dans Marc's answer

+0

Je serais probablement tendre vers les délégués de rappel en tant que paramètres, pour les raisons données dans ma réponse ... –

+0

@ Marc Je suis d'accord avec vous –

Questions connexes