7
votes

Avantages d'une classe statique

Dupliqué possible:
Quelle est l'utilisation d'une classe statique

Quels sont les avantages de déclarer une classe statique? xxx

y a-t-il autre que "il ne peut pas être instancié"?
Pourquoi voudriez-vous une classe statique, pour quelles raisons une classe devrait-elle être statique?
Est "Toute classe doit être déclarée statique à moins que cela soit destiné à être instancié" une bonne règle de pouce?


0 commentaires

5 Réponses :


2
votes

Vous avez besoin d'une classe statique pour créer des méthodes d'extension.


0 commentaires

7
votes

Les classes statiques sont utiles comme conteneurs pour les fonctions d'utilité et les constantes. Si la classe ne représente pas un objet et n'est utilisée que à cet effet, il est logique de le déclarer comme statique.


0 commentaires

0
votes

Une classe d'utilité, qui ne déclare que des méthodes statiques (comme System.IO.FILE) n'est pas instanciée, de sorte que c'est généralement statique.

Et vous avez raison, je trouve que c'est un bon usage. Singleton est différent, car il est censé être instancié en privé.


0 commentaires

3
votes

Les classes statiques et les membres de la classe sont utilisé pour créer des données et des fonctions qui peut être consulté sans créer un instance de la classe. Classe statique Les membres peuvent être utilisés pour séparer les données et comportement indépendant de toute identité d'objet: les données et les fonctions ne changent pas quel que soit Qu'advient-il de l'objet. Statique Les classes peuvent être utilisées quand il n'y a pas données ou comportement dans la classe qui dépend de l'identité d'objet.

pris directement de MSDN. Cela l'explique beaucoup mieux que je peux. Le fait essentiel ici est que l'objet persiste tout au long de la vie.

Les méthodes d'extention doivent également être écrites dans des classes statiques. J'ai tendance à les utiliser pour des étendues stresses ou des étendues de collecte.


0 commentaires

7
votes

Si une classe a le modificateur statique, alors:

  • Cela fait clairement clairement: ce n'est pas juste une classe qui se trouve avoir tous les membres statiques - c'est une classe qui ne sera que des membres statiques
  • Vous empêchez l'instanciation sans besoin d'un constructeur privé pour supprimer le public par défaut
  • Vous n'êtes pas autorisé à déclarer une variable de ce type
  • Vous n'êtes pas autorisé à utiliser ce type comme argument de type (IIRC, de toute façon)
  • Vous pouvez déclarer des méthodes d'extension dans le type s'il s'agit d'un type de haut niveau

    Le premier point est le plus important cependant, imo. Vous communiquez l'intention du compilateur et des autres développeurs.


4 commentaires

Dans un projet .NET est-il OK pour créer une classe statique pour passer des valeurs variables entre les pages ou un risque impliqué ici. J'ai entendu dire que nous devrions éviter d'utiliser des variables globales et des classes statiques à moins que le contexte ne soit très clair. Dans mon cas, j'utilise une classe statique pour simplement affecter une valeur d'une variable de page1 (dire, mysticclass.city = "London"), puis l'accédez à partir de la page2 comme mysticclass.city. Dans un cas aussi simple (avec seulement quelques membres de la classe), est-il correct d'utiliser une classe statique juste à des fins exclusives de réussite des valeurs variables entre les pages de la même application?


@nam: pages dans quel type d'application? Pour une application Web, c'est définitivement une mauvaise idée - il ne gère pas la mise à l'échelle sur plusieurs serveurs et ne conserve pas les données séparées pour différents utilisateurs. Dans une application de bureau, je dirais que ce n'est toujours pas un design propre ou testable, mais il n'a pas le même type de problèmes.


Désolé, j'ai oublié de mentionner wpf app . Mais oublier, en fait, s'est avéré être bon pour moi puisque votre réponse a même couvert les applications Web, également (merci). J'ai une impression que d'utiliser une classe statique dans pas nécessairement une mauvaise pratique mais doit être utilisé à bon escient .


@nam: Utiliser une classe statique pour stocker l'état mutable global (ce que vous proposez) est généralement une mauvaise idée imo. L'État global est difficile à motiver et difficile à tester. Les classes statiques qui ne stockent que l'état immuable et contiennent des méthodes d'état sont bien OMI.