2010-10-27 4 views
2

Possible en double:
What is the use of a static classavantages d'une classe statique

Quels sont les avantages de la déclaration d'une classe statique?

public static class MyStaticClass 
{ 
} 

Y a-t-il autre chose que "il ne peut pas être instancié"?
Sinon, pourquoi voudriez-vous une classe statique, pour quelles raisons une classe devrait être statique?
Est-ce que "toute classe doit être déclarée comme statique à moins qu'elle ne soit destinée à être instanciée", une bonne règle?

Répondre

5

Si une classe a le modificateur statique alors:

  • Il rend votre intention claire: ce n'est pas seulement une classe qui se trouve à avoir tous les membres statiques - c'est une classe qui ne fera que jamais avoir membres statiques
  • vous empêchez instanciation sans avoir besoin d'un constructeur privé juste pour supprimer le public par défaut un
  • Vous n'êtes pas autorisé à déclarer une variable de ce type
  • Vous n'êtes pas autorisé à utiliser ce type comme un argument de type (IIRC, de toute façon)
  • Vous pouvez déclarer des méthodes d'extension dans le type si elle est un type de niveau supérieur

Le premier point est le plus important Cependant, IMO. Vous communiquez l'intention à la fois au compilateur et aux autres développeurs.

2

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

4

Les classes statiques sont utiles en tant que conteneurs pour les fonctions d'utilité et les constantes. Si la classe ne représente pas un objet et n'est utilisée que dans ce but, il est logique de la déclarer statique.

0

Une classe d'utilitaires, qui ne déclare que des méthodes statiques (comme System.IO.File) n'est pas à instancier, elle est donc 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é.

2

classes et les membres de la classe sont statiques utilisés pour créer des données et des fonctions qui sont accessibles sans créer une instance de la classe. Classe statique les membres peuvent être utilisés pour séparer les données et le comportement qui est indépendant de toute identité d'objet: les données et les fonctions ne changent pas indépendamment de ce qui se passe à l'objet. Les classes statiques peuvent être utilisées lorsqu'il n'y a pas de données ou de comportement dans la classe que dépend de l'identité de l'objet.

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

Les méthodes d'extension doivent également être écrites dans des classes statiques. J'ai tendance à les utiliser pour les extensions de chaînes, ou les extensions de collection.

Questions connexes