C# Language statique


Exemple

Le modificateur static est utilisé pour déclarer un membre statique, qui n'a pas besoin d'être instancié pour être accédé, mais est simplement accessible via son nom, par exemple DateTime.Now .

static peut être utilisé avec des classes, des champs, des méthodes, des propriétés, des opérateurs, des événements et des constructeurs.

Bien qu'une instance d'une classe contienne une copie séparée de tous les champs d'instance de la classe, il n'y a qu'une seule copie de chaque champ statique.

class A
{
    static public int count = 0;

    public A()
    {
        count++;
    }
}

class Program
{
    static void Main(string[] args)
    {
        A a = new A();
        A b = new A();
        A c = new A();

        Console.WriteLine(A.count); // 3 
    }
}

count est égal au nombre total d'instances d' A classe A

Le modificateur static peut également être utilisé pour déclarer un constructeur statique pour une classe, pour initialiser des données statiques ou exécuter du code qui doit être appelé une seule fois. Les constructeurs statiques sont appelés avant que la classe ne soit référencée pour la première fois.

class A
{
    static public DateTime InitializationTime;

    // Static constructor
    static A()
    {
        InitializationTime = DateTime.Now;
        // Guaranteed to only run once
        Console.WriteLine(InitializationTime.ToString());
    }
}

Une static class est marquée avec le mot-clé static et peut être utilisée comme conteneur utile pour un ensemble de méthodes qui fonctionnent sur des paramètres, mais ne nécessite pas nécessairement d'être lié à une instance. En raison de la nature static de la classe, elle ne peut pas être instanciée, mais peut contenir un static constructor . Certaines caractéristiques d'une static class incluent:

  • Ne peut pas être hérité
  • Ne peut pas hériter d'autre chose que Object
  • Peut contenir un constructeur statique mais pas un constructeur d'instance
  • Ne peut contenir que des membres statiques
  • Est scellé

Le compilateur est également convivial et permettra au développeur de savoir si des membres de l'instance existent dans la classe. Un exemple serait une classe statique qui convertit les métriques américaines et canadiennes:

static class ConversionHelper {
    private static double oneGallonPerLitreRate = 0.264172;

    public static double litreToGallonConversion(int litres) {
        return litres * oneGallonPerLitreRate;
    }
}

Lorsque les classes sont déclarées statiques:

public static class Functions
{
  public static int Double(int value)
  {
    return value + value;
  }
}

toutes les fonctions, propriétés ou membres de la classe doivent également être déclarés statiques. Aucune instance de la classe ne peut être créée. Essentiellement, une classe statique vous permet de créer des groupes de fonctions regroupés de manière logique.

Étant donné que C # 6 static peut également être utilisé parallèlement à l’ using pour importer des membres et des méthodes statiques. Ils peuvent être utilisés sans nom de classe.

Ancienne manière, sans using static :

using System;

public class ConsoleApplication
{
    public static void Main()
    {
         Console.WriteLine("Hello World!"); //Writeline is method belonging to static class Console
    }

}

Exemple d' using static

using static System.Console;

public class ConsoleApplication
{
    public static void Main()
    {
         WriteLine("Hello World!"); //Writeline is method belonging to static class Console
    }

}

Désavantages

Bien que les classes statiques puissent être incroyablement utiles, elles comportent leurs propres avertissements:

  • Une fois que la classe statique a été appelée, la classe est chargée en mémoire et ne peut pas être exécutée via le ramasse-miettes tant que AppDomain ne contient pas la classe statique.

  • Une classe statique ne peut pas implémenter une interface.