Si vous n'êtes pas familier avec les méthodes statiques
Vous êtes probablement déjà familiers avec les méthodes statiques. Au cas où vous ne l'êtes pas, une différence facile à comprendre est que vous n'avez pas besoin de créer une instance d'un objet pour utiliser une méthode statique, mais vous devez créer une instance d'un objet pour appeler un non-objet. méthode statique.
Un bon exemple est les classes System.IO.Directory et System.IO.DirectoryInfo.
La classe Directory offre des méthodes statiques, contrairement à la classe DirectoryInfo.
Deux articles les décrivent ici pour que vous puissiez voir la différence par vous-même.
http://visualcsharptutorials.com/2011/01/system-io-directory-class/
http://visualcsharptutorials.com/2011/01/system-io-directoryinfo-class/
maintenant à statique événements ...
Cependant, les événements statiques sont rarement vus dans la nature. Il y a très peu de cas où je peux penser opf où je voudrais en utiliser un, mais il y a un article de CodeProject qui montre une utilisation potentielle.
http://www.codeproject.com/KB/cs/staticevent.aspx
La clé pensée ici est tirée de l'explication (gras ajouté par moi de signaler le texte pertinent):
Nous avons vu cette propriété comme un objet distinct et nous avons fait en sorte que il est seulement une instance à la fois. Et toutes les transactions savaient où le trouver en cas de besoin. Il y a une différence de bien. Les transactions n'auront pas besoin de connaître les changements qui se produisent sur le taux de change, ils utiliseront plutôt la dernière valeur modifiée au moment où ils l'utilisent en demandant la valeur actuelle.Cela ne suffit pas lorsque, par exemple, nous voulons mettre en œuvre une application où l'interface utilisateur réagit immédiatement sur les changements dans les caractéristiques de l'interface utilisateur comme la police, comme si elle doit arriver à en temps réel. Il serait très facile si nous pouvions avoir une propriété statique dans la classe police appelée currentFont et une méthode statique pour changer cette valeur et un événement statique à toutes les instances pour leur faire savoir quand ils ont besoin de mettre à jour leur apparence.
En tant que développeurs .NET, nous sommes formés pour travailler avec un modèle déconnecté. Pensez à ADO.NET par rapport à ADO classique. Dans une application VB6, vous pouvez utiliser des contrôles de données qui permettent les fonctionnalités suivantes: Si vous exécutiez l'application sur votre PC, les données de votre grille se mettraient à jour lorsqu'une personne sur un autre PC modifierait les données.
Ce n'est pas quelque chose que les développeurs .NET sont habitués. Nous sommes très habitués au modèle déconnecté. Les événements statiques permettent une expérience plus "connectée". (Même si cette expérience est quelque chose que nous ne sommes pas habitués à plus.)
donc la liste des abonnés est trop au niveau de la classe? cela signifie-t-il que l'abonnement multiple en même temps entraînera de mauvaises choses? –
L'implémentation par défaut pour les événements statiques utilisera 'Interlocked.CompareExchange', ce qui signifie que dans le cas d'une course, l'un des threads ne sera pas abonné. – cdhowie
@cdhowie: Ce serait une utilisation très stupide de 'Interlocked.CompareExchange'. Normalement, compare-and-swap est associé à une boucle de réessai. –