Quand à faire une méthode statique?
Je voudrais savoir comment les gens décider de définir une méthode statique. Je suis conscient qu'une méthode ne peut être définie comme statique si elle n'a pas besoin d'accéder à des champs d'instance. Donc, disons que nous avons une méthode qui n'a pas accès à des champs d'instance, avez-vous toujours définir une méthode statique, ou si vous avez besoin d'appeler de manière statique (sans référence à une instance).
Peut-être une autre façon de poser la même question est de savoir si vous utilisez statique ou non statique par défaut?
- Offtopic: Votre avatar ramène de bons souvenirs 🙂
- Cela peut vous être utile: stackoverflow.com/questions/202560/...
- Ou l'autre de ces éléments: stackoverflow.com/questions/1375227/..., bytes.com/topic/c-sharp/answers/... (caractéristiques de réponse de Jon Skeet)
- Je pense que cette question ne peut être véritablement répondu indépendant de la langue.
Vous devez vous connecter pour publier un commentaire.
- Je utiliser des méthodes statiques chaque fois que je le peux. Avantages:
Kevin Bourrillion a écrit perspicaces réponse sur ce sujet il y a quelques temps (il est vrai à partir d'une perspective Java, mais je pense que c'est applicable à d'autres langues aussi).
Il affirme que vous devriez fondamentalement seulement utiliser des méthodes statiques pour fonctions pures.
J'ai tendance à être d'accord. (Bien que dans mon propre code, traditionnellement, j'ai probablement utilisé de manière trop statique méthodes d'assistance partout... 😛 Et cela a sûrement fait un code qui utilise ces méthodes plus difficile à tester.)
Si ce que la méthode ne dépendent exclusivement de ses arguments, vous pouvez la rendre statique. Si la méthode ne permet pas d'instancier un de vos autres classes définies par l'utilisateur, vous pouvez le rendre statique. La valeur par défaut, cependant, est de l'avoir en tant que non-statique.
Utiliser des méthodes statiques lorsque vous effectuez des opérations qui ne fonctionnent pas sur les instances de la classe.
Un exemple parfait serait un
sqrt
méthode deMath
classe.Il dépend. Dans les langues où les non-membres les fonctions sont possibles, je dirais que la plupart du temps, si la méthode pourrait être faite statiques, il doit être fait d'un non-membre de la fonction au lieu de cela, la non-ami si possible. Vous pouvez le dire, j'ai la plupart du temps C++ arrière-plan.
En "pur" OO langues en cas de non-fonctions de membre ne sont pas possibles, cela dépend de savoir si la méthode n'est "ailleurs" statiques (c'est à dire qu'il n'arrive pas à avoir besoin de l'accès pour les membres de l'instance), ou véritablement logiquement statique - c'est une méthode de la classe entière au lieu d'une instance particulière.
Non statique par défaut, statique quand j'ai besoin de la fonctionnalité sera disponible à partir d'au moins deux classes différentes, et je ne veux pas perdre un constructeur.
ps. Archimède règles!
(C#) Par défaut, j'utilise des méthodes statiques dans les classes statiques et non statiques les méthodes non statiques de classes.
Comme je l'ai élaboré une classe, je me retrouve naturellement convergent sur le fait entièrement statique ou entièrement non-statique. Practially parlant, si je commence à vouloir définir membres statiques dans une classe statique, je trouve souvent qu'il finira par faire le plus de sens à briser ces hors séparée en une classe statique, soit une classe utilitaire comme les Maths ou d'une application globale de la classe (comme .NET ConfigurationManager).
À partir d'un objet point de vue, une méthode est de faire quelque chose pour/avec un objet. Ainsi, si vous utilisez un objet instancié, il fait le plus de sens pour moi de penser que l'objet de méthodes non statiques. Techniquement, il est techniquement pouvez faire un non-classe statique statique membres s'ils n'ont pas besoin d'accéder à une instance. Mais apparemment, au moins, une classe de méthodes serait encore faire quelque chose à/avec cette classe, donc, je voudrais encore faire d'eux des non-statique. Toutes choses étant égales par ailleurs, ce qui est.