web-dev-qa-db-fra.com

Qu'est-ce qu'une classe "statique"?

En C # Quelle est la différence entre:

public static class ClassName {}

Et:

public class ClassName {}
40
Jeremy H

Une classe statique ne peut pas être instanciée et ne peut contenir que des membres statiques. Par conséquent, les appels d'une classe statique sont comme: MyStaticClass.MyMethod(...) ou MyStaticClass.MyConstant.

Une classe non statique peut être instanciée et peut contenir des éléments non statiques (constructeurs d'instances, destructeurs, indexeurs). Un membre non statique d'une classe non statique est appelable uniquement via un objet:

MyNonStaticClass x = new MyNonStaticClass(...);
x.MyNonStaticMethod(...);
40
lmsasu

Premièrement, un commentaire sur une réponse posée sur ce que signifie "statique". En termes de C #, "statique" signifie "relatif au type lui-même, plutôt qu'une instance du type". Vous accédez à un élément statique (à partir d'un autre type) à l'aide du nom de type au lieu d'une référence ou d'une valeur. Par exemple:

// Static method, so called using type name
Guid someGuid = Guid.NewGuid();
// Instance method, called on a value
string asString = someGuid.ToString();

Maintenant, classes statiques ...

Les classes statiques sont généralement utilisées comme des classes "utilitaires". L'exemple canonique est probablement System.Math . Il n'a pas de sens de créer une instance de mathématiques - ça "est". Quelques règles (les deux "peuvent" et "ne peuvent pas"):

  • Les classes statiques dérivent toujours de object. Vous ne pouvez pas spécifier de type de base différent ou rendre la classe statique implémenter une interface.
  • Les classes statiques ne peuvent avoir aucun membre d'instance - toutes les variables, méthodes, etc. doivent être statiques.
  • Les classes statiques ne peuvent pas déclarer aucun constructeur d'instance et le compilateur ne Créez un constructeur sans paramètre par défaut. (Avant que les classes statiques ne sont arrivées au C # 2.0, les gens créeraient souvent une classe abstraite avec un constructeur privé, ce qui empêchait l'instanciation. Pas besoin ici.)
  • Les classes statiques sont implicitement abstraites (c'est-à-dire qu'ils sont compilées à IL qui décrit une classe abstraite) mais vous ne pouvez pas ajouter le modificateur abstract vous-même.
  • Les classes statiques sont implicitement scellées (c'est-à-dire qu'ils sont compilées à IL qui décrivent une classe scellée) mais vous ne pouvez pas ajouter le modificateur sealed vous-même.
  • Les classes statiques peuvent être générique.
  • Les classes statiques peuvent être imbriquées, dans des classes non statiques ou statiques.
  • Les classes statiques peuvent ont des types imbriqués, non statiques ou statiques.
  • Seules des classes non génériques statiques et de niveau supérieur peuvent contenir des méthodes d'extension (C # 3.0).
67
Jon Skeet

Une classe statique ne peut également être héritée du fait que d'une classe non statique avec des membres statiques peut être héritée.

6
Dan Herbert
public static class ClassName {}

Une classe statique est comme une variable globale: vous pouvez l'utiliser n'importe où dans votre code sans les instancier. Par exemple: Nom de classe. Après l'opérateur DOT, vous pouvez utiliser n'importe quelle propriété ou fonction de celui-ci.

 public class ClassName {}

Mais si vous avez une classe non statique, vous devez créer une instance de cette classe. Par exemple:

 ClassName classNameObject = new ClassName(); 
6
Syed Tayyab Ali

Toutes les méthodes/propriétés d'une classe statique DOIGNE Soyez statique, tandis qu'une classe "normale" peut contenir un mélange d'instance et de méthodes statiques.

5
Mark Simpson

La classe statique peut contenir uniquement des membres statiques.

Un membre statique peut être utilisé sans instantifier d'une classe en premier.

3
Konstantin Tarkus

Vous ne pouvez pas instancier (créer des objets de) une classe statique. Et il ne peut contenir que des membres statiques.

Exemple: System.Math

3
Henk Holterman

http://www.javaworld.com/javaworld/javaqa/1999-08/01-qa-static2.html - Très bon article à ce sujet. Ceci est pour Java. Mais je pense que le concept devrait aussi devrait aussi en C #.

2
Sanjeev Kumar Dangi

Les classes statiques et les membres sont utilisés pour créer des données et des méthodes pouvant être consultées sans créer d'instance (à l'aide du mot clé new, ils ne peuvent pas avoir de constructeur) de la classe.

Les classes statiques peuvent être déclarées lorsqu'il n'y a aucune dépendance à l'égard de sa propre identité d'objet, une classe statique ne doit donc contenir que des membres statiques.

Ces classes sont chargées par le CLR lorsque le programme ou l'espace de noms contenant la classe est chargé.

Ils sont également scellés, ne peuvent pas être hérités.

2
CMS

variable statique en c

une variable locale à une classe comme variables automatiques, mais la variable statique ne disparaît pas car la fonction n'est plus active. Les valeurs persist.Ifl contrôle revient, les variables statiques ont la même valeur

Fonction statique dans c fonctions qui ne sont pas visibles pour fonctionner dans d'autres fichiers.

* Les membres de données statiques au CPP * Les membres de données peuvent être des variables ou des fonctions dans le CPP statique s'appliquent aux deux membres de données que la classe elle-même peut être statique "Il n'y a que Une copie des éléments de données statiques partagés par tous les objets de cette classe "Les membres de données statiques peuvent accéder à des membres de données statiques

classe statique Cette classe ne peut pas instancier des objets

1
richu