Classe statique vs classe instance [dupliquer]
Question
Dupliquer
S'il vous plaît pardonnez-moi si cette question semble élémentaire - je suis à la recherche sur un code source qui ressemble par ailleurs assez bon, mais il a soulevé quelques questions ...
Si une classe donnée n'a pas de données membre - à-dire qu'il ne conserve aucune sorte d'état, y at-il des avantages à ne pas marquer cette classe en tant que classe statique avec des méthodes statiques?
Y a-t-il des avantages à ne pas marquer des méthodes qui ne maintiennent pas d'état statique?
Merci!
EDIT: Comme quelqu'un a parlé, le code que je suis à la recherche est écrit en C #.
La solution
Oui. Je peux penser à quelques raisons:
- Facilité d'moqueuse et tests unitaires
- Facilité d'ajout d'état
- Vous pouvez passer autour (comme quelque chose ou
interface
)
Autres conseils
Je dirais qu'il ya un avantage pour les rendre les méthodes statiques de la classe, et au-dessus de l'abstrait que faire de classe. De cette façon, il est clair pour le programmeur que cette classe n'a jamais été destiné à être instancié et les méthodes sont encore disponibles.
Il pourrait y avoir un avantage à laisser des méthodes qui ne si vous avez l'intention (ou pensez que vous pourriez avoir l'intention) changent pas d'état non-statique, d'hériter de la classe et remplacer ces méthodes avec code Finalité état de changement. Bien que dans ce cas, il devrait vraiment être une classe abstraite.
Si une classe ne maintient pas un Etat, n'a pas de méthodes d'instance, et pourraient être mises en œuvre entièrement avec des méthodes de classe, je prends habituellement un long regard dur si ses comportements seraient en fait plus de sens ailleurs. Je trouve qu'ils semblent généralement avoir beaucoup de méthodes le long des lignes de, qui doSomethingWithItem(Item item)
plus judicieux comme une méthode d'instance dans Item
.
Oui, je sais que cela ne répond pas à votre question, mais je pense que d'autres ont couvert que assez bien déjà, et je voulais une autre perspective là-bas.