100 votes

Si les méthodes c# qui * peut * être statique statique ?

<p>Si les méthodes c# que <em>peut</em> être statique statique ?</p> <p>Nous avons discuté de cela aujourd'hui et je suis peu sur la clôture. Imaginez que vous avez une méthode longue qui vous refactorisez quelques lignes de. La nouvelle méthode probablement prend quelques variables locales de la méthode parente et retourne une valeur. Cela signifie qu’il <em>pourrait</em> être statique.</p> <p>La question est : <em>doit</em> il être statique ? Il n’est pas statique par conception ou choix, simplement par sa nature, qu’il ne référence pas les valeurs de l’instance.</p>

57voto

Scott Wisniewski Points 14420

Il dépend. Il y a vraiment 2 types de méthodes statiques:

  1. Les méthodes statiques, car ils PEUVENT être
  2. Les méthodes statiques, car ils doivent être

Dans une petite et moyenne taille de la base de code, vous pouvez réellement traiter les deux méthodes de façon interchangeable.

Si vous avez une méthode qui est dans la première catégorie (peut-être statique), et vous devez le modifier pour accéder à la classe de l'etat, il est relativement simple à comprendre si c'est possible de tourner la méthode statique dans une méthode d'instance.

Dans une grande base de code, toutefois, le nombre de sites d'appel pourrait faire une recherche pour voir si il est possible de convertir une méthode statique non statique trop coûteux. Beaucoup de fois les gens vont voir le nombre d'appels, et de dire "ok... je ferais mieux de ne pas modifier cette méthode, mais au lieu d'en créer un nouveau qui fait ce dont j'ai besoin".

Que peuvent entraîner soit:

  1. Beaucoup de duplication de code
  2. Une explosion dans le nombre d'arguments de méthode

Ces deux choses sont mauvaises.

Donc, mon conseil serait que si vous avez une base de code plus de 200K, LOC, que je ne ferait que des méthodes statiques si elles sont doit-être-des méthodes statiques.

Le refactoring de non-statique statique est relativement facile (il suffit d'ajouter un mot-clé), donc si vous voulez faire un peut-être-statique en statique plus tard (quand vous en avez besoin de fonctionnalités en dehors d'une instance), alors vous pouvez. Cependant, à l'inverse de refactoring, en tournant un peut-être-statique dans une méthode d'instance est BEAUCOUP plus cher.

Avec de grandes bases de code, c'est mieux d'erreur sur le côté de la facilité d'extension, plutôt que sur le côté de idealogical pureté.

Donc, pour les grands projets ne font pas les choses statiques, sauf si vous en avez besoin pour être. Pour les petits projets, il suffit de faire ce que jamais vous aimez le mieux.

42voto

Joel Coehoorn Points 190579

Je voudrais pas en faire un public statique membre de cette classe. La raison en est que de la rendre publique statique, c'est dire quelque chose à propos de la classe "type": non seulement que "ce type sait comment faire ce comportement", mais aussi "il est de la responsabilité de ce type pour effectuer ce comportement." Et les chances sont le comportement n'a plus aucun rapport réel avec le plus grand type.

Cela ne signifie pas que je ne voudrais pas le rendre statique, bien. Demandez-vous ceci: la nouvelle méthode appartiennent logiquement d'ailleurs? Si vous pouvez répondre "oui", vous probablement ne voulez pas le rendre statique (et de le déplacer). Même si ce n'est pas vrai, vous pouvez toujours faire de l'électricité statique. Il suffit de ne pas le marquer public.

Comme une question de commodité, vous pourriez au moins marquer internal. Généralement, cela évite de devoir déplacer la méthode si vous n'avez pas facilement accès à un plus type approprié, mais laisse toujours accessible en cas de besoin de manière à ne pas s'afficher en tant que partie de l'interface publique pour les utilisateurs de votre classe.

20voto

Michael Points 34110
<p>Pas nécessairement.</p> <p>Passer les méthodes publiques de statique à non-statique est une modification avec rupture et exigerait des modifications à l’ensemble de vos appelants ou des consommateurs. Si une méthode apparaît comme une méthode d’instance, mais il arrive de ne pas utiliser les membres de l’instance, je dirais ce qui en fait une méthode d’instance en guise d’évolutivité.</p>

13voto

JP Alioto Points 33482
<p>Oui. « Il peut être statique » parce qu’il ne fonctionne pas sur l’état de l’objet sur lequel il est appelé. Par conséquent, il n’est pas une méthode d’instance, mais une méthode de classe. Si il peut faire ce qu’il doit faire sans jamais accéder à des données pour l’instance, alors il devrait être statique.</p>

12voto

Jabe Points 1158
<p>Oui, il se doit. Il y a diverses <a href="http://en.wikipedia.org/wiki/Coupling%5F%28computer%5Fscience%29">mesures de couplage</a> qui mesurent comment votre classe dépend d’autres choses, comme les autres classes, méthodes, etc.. Faire des méthodes statiques, c’est une façon de conserver le degré de couplage vers le bas, car vous pouvez être <strong>sûr</strong> une méthode statique ne référence pas tous les membres.</p>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: