[C#] Quelle est l'utilisation d'une classe statique


Answers

Le modèle de compilation et de métadonnées pour .net requiert que toutes les fonctions soient définies dans une classe. Cela rend la vie un peu plus facile et plus simple pour les api de réflexion puisque les concepts de la classe propriétaire et sa visibilité sont bien définis. Cela rend également le modèle il plus simple.

puisque cela exclut les fonctions libres (celles qui ne sont pas associées à une classe), cela permet de choisir où placer les fonctions qui n'ont pas d'état associé (et qui ont donc besoin d'une instance). S'ils n'ont besoin d'aucun état associé à eux et n'ont aucune classe basée sur une instance claire à laquelle ils peuvent être associés et ainsi définie à l'intérieur, il doit y avoir un idiome pour leur définition.

Auparavant, le meilleur moyen était de définir les méthodes au sein d'une classe dont le constructeur était privé et qu'aucune des fonctions de la classe ne le construisait.

C'est un peu compliqué (car cela ne permet pas de savoir pourquoi cela a été fait sans commentaires) et l'API de réflexion peut encore trouver le constructeur et l'invoquer.

Ainsi, les classes statiques étaient permises, rendant l'intention de la classe, celle d'un lieu pour la définition des méthodes statiques, claire aux utilisateurs et au système de types. Les classes statiques n'ont aucun constructeur.

Question

Quelle est l'utilité d'une classe statique? Je veux dire quels sont les avantages de l'utilisation de la classe statique et comment CLR gère les classes statiques?




J'ai eu une idée claire de ces déclarations.

En savoir plus sur la classe statique. Premièrement, nous devons d'abord faire la distinction entre les données statiques et les données d' instance .

Chaque fois que vous créez une nouvelle instance d'une classe, vous obtenez une nouvelle copie des données d'instance avec lesquelles jouer. Les méthodes d'instance de la classe fonctionnent sur les données d'instance. Les données d'instance sont complètement indépendantes des données d'instance de toutes les autres classes et même des instances de la même classe. Si vous modifiez une valeur dans une instance, elle n'a aucun impact sur la même valeur dans d'autres instances. La majeure partie des données de programme sont des données d'instance.

Les données statiques sont équivalentes aux données globales. Tout le monde dans le programme voit les mêmes données. Si quelqu'un change les données, tout le monde verra le changement aussi. Les données statiques sont utiles pour partager des informations à travers un programme, telles que des chaînes de connexion à une base de données ou des fichiers journaux. Il n'y a qu'une seule copie des données statiques dans la mémoire en général. (Il existe des exceptions, par exemple lorsque vous travaillez avec plusieurs domaines d'application).

Lorsque vous créez une instance d'une classe, vous allouez effectivement de la mémoire pour contenir votre propre copie des données d'instance définies par la classe. Si vous créez 5 instances d'une classe, vous obtenez 5 emplacements de mémoire distincts où chaque emplacement possède sa propre copie des données d'instance. Chaque bloc de mémoire est indépendant des autres.

Si une classe n'a aucune donnée d'instance, cela n'a aucun sens de créer des instances de celle-ci. Le faire est inoffensif mais aussi une perte de temps. C'est là que les classes statiques entrent en jeu. Une classe statique est un moyen d'identifier une classe comme n'ayant aucune donnée d'instance . En marquant la classe comme statique, vous dites au compilateur que toutes les données de la classe sont partagées à travers le tableau . Par conséquent, le compilateur applique certaines règles pour clarifier les choses. Une classe statique ne peut contenir que des membres statiques. Une classe statique ne peut pas être instanciée. Une classe statique doit être scellée. Le compilateur impose cela pour la commodité des développeurs.

Une classe statique est scellée. En effet, les classes statiques ne peuvent pas avoir de données par instance.

Les méthodes statiques sont définies au niveau du type, pas au niveau de l'instance. C'est pourquoi le remplacement ne fonctionne pas avec les méthodes / propriétés / événements statiques ...

Constructeur statique est appelé une fois et la classe statique reste dans la mémoire pour la durée de vie du domaine d'application dans lequel réside votre programme.




Les classes statiques sont souvent utilisées pour regrouper des services globaux connexes auxquels vous ne souhaitez pas accéder initialement avec une instance d'objet. Un exemple est la classe Math dans le .Net BCL, que vous utilisez directement, par exemple, Math.Sqrt (10.0)




Les classes statiques sont scellées. Cela peut être une option utile pour utiliser static pour les classes d'utilitaires.