11
votes

C # Quelle est la différence entre classe statique et non statique (je parle de la classe elle-même et non du champ)

La syntaxe peut-être mal

public class Storage
{
    private void Storage () {};
    public static string filePath { get; set; }
}


3 commentaires

@Tuzo - associé non en double .. Cette question est une comparaison


@OP - Je pense que votre extrait de 2e code devrait être un stockage privé () {}; ... comme dans la CTOR privée


@Gishu désolé. Vous avez raison :) mais toujours tous les connaissent, le montrant.


7 Réponses :


3
votes

Beaucoup de classes ont à la fois des instances et des méthodes statiques. Chaîne par exemple a: xxx

et xxx

Si vous demandez pourquoi la classe et la méthode ont besoin du mot clé statique, il est simplement intentionnellement. Je vois ce que vous demandez, si la classe est statique, bien sûr, toutes les méthodes sont également statiques, semble aussi redondante de la mettre deux fois là-bas. Je ne sais pas s'il y a une bonne raison pour ça ou pas.


0 commentaires

15
votes

Si vous regardez le code IL, la classe statique sera abstrait et scellé qui donne deux qualités importantes:

  • Vous ne pouvez pas créer d'instances de celui-ci
  • Il ne peut pas être hérité

    Une conséquence du premier point est qu'une classe statique ne peut pas contenir de membres non statiques. Il peut y avoir de nombreuses utilisations des membres statiques dans une classe non statique. Une utilisation courante consiste à avoir une usine de classe: xxx


3 commentaires

Hein? Votre exemple n'est pas une classe statique?


Ce n'est pas une classe statique cependant?


@Thorarin et @Svish: c'est correct. Il sert à répondre à la dernière question de l'utilisation de membres statiques dans des types non statiques (comme j'ai interprété la question passée dans le poste d'origine)



2
votes

Lorsque vous déclarez une classe comme statique :

  • Il est autorisé à avoir seuls membres statiques ,
  • Il ne peut pas être instancié (il n'a pas de constructeur public) et
  • il ne peut être hérité (c'est scellé).

    Toute classe qui n'est pas déclarée comme statique peut être instanciée, héritée et peut avoir des membres non statiques.


0 commentaires

6
votes

Voici le point chaud officiel / msdn pour en savoir plus sur CLASSES STATIQUES

Les principales caractéristiques d'une classe statique sont:
* Ils ne contiennent que des membres statiques.
* Ils ne peuvent pas être instanciés.
* Ils sont scellés.
* Ils ne peuvent pas contenir des constructeurs d'instance

Fondamentalement, une classe statique est identique à une classe «normale» / non statique qui n'a que des méthodes statiques et une CTOR privée. Le marquant comme statique aide à clarifier l'intention et aide le compilateur à faire des chèques de compilation pour interdire certaines choses par ex. interdire l'instanciation.

Utilisations du monde réel Je peux penser: Utilisez-le pour loger ou comme moyen d'organiser

  • Méthodes utilitaires (méthodes non associées à une instance d'un type) par ex. Math pour les méthodes min et max
  • Méthodes d'extension par exemple StockwatTextensions pour une méthode de réinitialisation sur une chronomètre

0 commentaires

3
votes

Les classes statiques sont uniquement disponibles auprès de C # 2 vers le haut. En C # 1, vous devriez sceller votre classe et préciser qu'il n'est pas instanciable par ajout d'un constructeur privé pour obtenir ce type de comportement.


0 commentaires

1
votes

Une classe statique est essentiellement la même chose qu'une classe non statique, mais il y a une différence: une classe statique ne peut pas être instanciée. En d'autres termes, vous ne pouvez pas utiliser le nouveau mot-clé pour créer une variable du type de classe. Parce qu'il n'y a pas de variable d'instance, vous accédez aux membres d'une classe statique en utilisant le nom de la classe lui-même. XXX

Dans ce cas, la classe n'a pas besoin d'instancier. Il occupera une valeur unique du stockage de classe pour tous les objets. xxx

Dans ce cas, la classe est non statique, doit être instancée


0 commentaires

0
votes

Comme nous savons que les variables et les fonctions sont de deux types d'instance et de classe.

une classe statique - uniquement des variables de classe, aucune variables d'instance.

Par conséquent, ne peut pas être instancié, seulement accessible par classeName.Method ().

Il contient uniquement des constructeurs privés Aucun constructeur public n'est là.

Une classe statique ne contient que des membres statiques.


0 commentaires