40 votes

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

En C # quelle est la différence entre:

 public static class ClassName {}
 

Et:

 public class ClassName {}
 

67voto

Jon Skeet Points 692016

Tout d'abord, un commentaire sur une réponse posées à propos de ce "statique" signifie. En C#, le terme "statique" signifie "concernant le type lui-même, plutôt que d'une instance de ce type." Vous accédez à un membre statique (à partir d'un autre type) en utilisant le nom de type, au lieu d'une référence ou 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, les classes statiques...

Les classes statiques sont généralement utilisés comme "utilitaire" des classes. L'exemple canonique est probablement l' System.Math. Il n'est pas judicieux de créer une instance de math - il juste de "l'est". Quelques règles (à la fois "peut" et "ne peut pas"):

  • Les classes statiques toujours tirer à partir d' object. Vous ne pouvez pas spécifier un autre type de base, ou de faire de la statique de la classe implémente une interface.
  • Les classes statiques ne peuvent pas avoir tout les membres de l'instance - toutes les variables, méthodes, etc doit être statique.
  • Les classes statiques ne pouvez pas déclarer une instance constructeurs et le compilateur ne pas créer un constructeur sans paramètre par défaut. (Avant les classes statiques est venu en C# 2.0, les gens vont souvent créer une classe abstraite avec un constructeur privé, ce qui a empêché l'instanciation. Pas besoin ici.)
  • Les classes statiques sont implicitement abstrait (c'est à dire qu'ils sont compilés à l'IL qui décrit une classe abstraite), mais vous ne pouvez pas ajouter de l' abstract modificateur de vous-même.
  • Les classes statiques sont implicitement scellé (c'est à dire qu'ils sont compilés à l'IL qui décrit une classe scellée), mais vous ne pouvez pas ajouter de l' sealed modificateur de vous-même.
  • Les classes statiques peuvent être génériques.
  • Les classes statiques peuvent être imbriquées, soit non-statique ou statique des classes.
  • Les classes statiques peuvent avoir les types imbriqués, soit non-statique ou statique.
  • Seulement statique, de niveau supérieur non-classes génériques peuvent contenir des méthodes d'extension (C# 3.0).

40voto

lmsasu Points 2462

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

Une classe non statique peut être instanciée et peut contenir des membres non statiques (constructeurs d'instance, destructeur, indexeurs). Un membre non statique d'une classe non statique ne peut être appelé que via un objet:

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

6voto

Dan Herbert Points 38336

Une classe statique ne peut pas non plus être héritée de, tandis qu'une classe non statique avec des membres statiques peut être héritée de.

5voto

Mark Simpson Points 10789

Toutes les méthodes / propriétés d'une classe statique doivent être statiques, tandis qu'une classe «normale» peut contenir un mélange d'instances et de méthodes statiques.

3voto

Konstantin Tarkus Points 16862

La classe statique ne peut contenir que des membres statiques.

Un membre statique peut être utilisé sans instancier une classe au préalable.

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:

X