Le static
mot-clé sur un membre dans de nombreuses langues signifie que vous ne devriez pas créer une instance de cette classe pour pouvoir accéder à ce membre. Cependant, je ne vois aucune justification pour faire une classe entière static
. Pourquoi et quand devrais-je faire un cours static
?
Quels sont les avantages de faire un cours static
? Je veux dire, après avoir déclaré une classe statique, il faut quand même déclarer tous les membres auxquels il / elle veut avoir accès sans instanciation, comme statiques également.
Cela signifie que, par exemple, la Math
classe pourrait être déclarée normale (non statique), sans affecter le code utilisé par les développeurs. En d'autres termes, rendre une classe statique ou normale est en quelque sorte transparent pour les développeurs.
la source
Réponses:
Cela montre clairement aux utilisateurs comment la classe est utilisée. Par exemple, écrire le code suivant serait insensé:
C # ne pas avoir à interdire cela , mais puisqu'il ne sert à rien, pourrait aussi bien indiquer à l'utilisateur. Certaines personnes (y compris moi) adhèrent à la philosophie selon laquelle les langages de programmation (et les API…) doivent être aussi restrictifs que possible pour les rendre difficiles à utiliser de manière erronée: les seules opérations autorisées sont alors celles qui ont un sens et (espérons-le) correctes.
la source
sealed
en premier lieu. Je reconnais que tout le monde n'est pas d'accord avec ce sentiment, mais les commentaires ne sont pas un bon endroit pour en discuter. Mais dans le cas destatic
ce problème ne se pose même pas: l'instanciationSystem.Math
n'aura jamais de sens.Math
classe comme statiques sans déclarer laMath
classe comme statiques, vous pouvez néanmoins l'utiliser, sans avoir besoin d'instanciation.static
.new Math()
.StackOverflow a une excellente discussion sur ce sujet . Pour plus de commodité, je vais le copier-coller ici, au nom de son auteur, Mark S. Rasmussen :
la source
Je suis surpris que personne d'autre n'ait mentionné que les
static
classes autorisent les méthodes d'extension - étendre en toute sécurité un type existant (y compris l' ajout de définitions de méthodes aux interfaces ) que vous ne possédez pas. Par exemple, qu’est-ce qu’en Scalapeut être exprimé en C # comme
la source
Pour moi, une classe statique (en C #) est un peu comme appeler une fonction.
Par exemple
Je passe une chaîne et récupère une chaîne. Tout est contenu dans cette méthode. Pas d'accès à la variable membre, etc.
Honnêtement, son utilisation a principalement consisté à réduire les lignes de code:
Pourquoi faire:
Quand je peux faire ça:
Donc, j'utilisais des classes statiques dans ces cas-là, quand je voulais faire quelque chose sans avoir besoin d'une classe et que cela voulait dire moins de dactylographie.
Les points de Mark S. sont valables, mais pour moi, si j'ai des méthodes utilitaires, il est simplement plus facile de prétendre que j'appelle une fonction pour les référencer en tant que doublures.
C'est peut-être simpliste, mais c'est principalement comme ça que j'ai utilisé
static
.la source