Explication des classes statiques et des membres de classe statiques en C #

Le mot clé static dans le langage de programmation C # vous permet de définir des classes statiques et des membres statiques.

Une classe statique est similaire à une classe à la fois abstraite et scellée. La différence entre une classe statique et une classe non statique est qu'une classe statique ne peut pas être instanciée ou héritée et que tous les membres de la classe sont de nature statique. Pour déclarer une classe comme statique, vous devez la marquer avec le mot clé static dans la déclaration de classe. 

Il n'y a pas de comportement dans une classe ou un membre statique, il est donc inutile d'autoriser l'héritage d'une classe statique. Une classe statique ne peut avoir que des membres statiques - vous ne pouvez pas déclarer de membres d'instance (méthodes, variables, propriétés, etc.) dans une classe statique. Vous pouvez avoir un constructeur statique dans une classe statique, mais vous ne pouvez pas avoir de constructeur d'instance dans une classe statique.

Quand utiliser une classe statique en C #

Quand devriez-vous aller pour un cours statique? En règle générale, vous pouvez implémenter des classes d'assistance ou d'utilitaire en tant que classes statiques car elles n'ont pas besoin d'être instanciées ou héritées et contiennent généralement une collection de certaines méthodes et propriétés réutilisables. La liste de code suivante illustre à quoi ressemble une classe statique en C #.

classe statique publique FileLogger

    {

        Journal public static void (message sous forme de chaîne)

        {

            // Méthode pour enregistrer les données dans un fichier texte

        }

    }

Quand utiliser des méthodes statiques en C #

Les méthodes statiques sont des méthodes qui n'ont pas besoin d'une instance de la classe pour être appelées - elles peuvent être appelées sur la classe elle-même. Notez que les méthodes statiques ne peuvent accéder qu'aux membres statiques de la classe. Vous pouvez avoir des méthodes statiques dans une classe statique ou une classe non statique. En outre, vous pouvez avoir un constructeur statique dans une classe statique ou une classe non statique. Un constructeur statique est utilisé pour initialiser les membres statiques d'une classe. Le constructeur statique d'une classe est appelé la première fois qu'un membre statique de la classe est accédé.

Pourquoi utiliser des méthodes statiques? Leur exécution est un peu plus rapide que les méthodes non statiques, c'est-à-dire les méthodes d'instance. La raison est que le runtime transmet le thispointeur en tant que paramètre implicite aux méthodes non statiques ou d'instance. Notez que pour une méthode non statique, le compilateur émet l' callvirtinstruction même si la méthode n'est pas virtuelle. Si vous rendez vos méthodes statiques, le compilateur émet des callsites non virtuels , éliminant la vérification supplémentaire pour savoir si l'instance est nulle. Cela peut vous apporter des avantages en termes de performances.

Par conséquent, si l'application que vous créez est une application à performances critiques, il peut être utile d'utiliser des types et des méthodes statiques dans votre code. Les gains de performances peuvent être appréciables si votre code effectue un grand nombre d'appels à ces types et membres.

L'extrait de code suivant illustre à quoi ressemble une méthode statique.

Journal public static void (message sous forme de chaîne)

        {

             string filePath = @ "F: \ Log.txt";

            en utilisant (StreamWriter streamWriter = new StreamWriter (filePath, true))

            {

                streamWriter.WriteLine (message);

                streamWriter.Close ();

            }

        }

Comment utiliser les membres statiques d'une classe en C #

Le CLR divise la mémoire système en trois régions distinctes: la pile, le tas et le tas haute fréquence. Étant donné que les objets statiques sont accessibles directement sans créer d'instances de la classe, ils doivent exister dans la mémoire pendant toute la durée de vie de l'application; ils n'ont pas besoin d'être ramassés. Par conséquent, les objets statiques sont stockés dans le tas haute fréquence. Vous disposez généralement d'un segment de mémoire haute fréquence pour chaque domaine d'application.

Jetons maintenant un coup d'œil aux membres statiques d'une classe. Encore une fois, un objet statique est un objet qui persiste dans la mémoire pendant toute la durée de l'exécution de l'application. En étendant l'exemple de journalisation ci-dessus, la liste de code suivante illustre à quoi ressemblerait une classe FileLogger avec des membres statiques.

classe statique publique FileLogger

    {

        objet statique privé en lecture seule lockObject = new object ();

        chaîne statique publique FilePath

        {

            avoir; ensemble;

        }

        Journal public static void (message sous forme de chaîne)

        {

            lock (lockObject)

            {

                if (! string.IsNullOrEmpty (FilePath))

                en utilisant (StreamWriter streamWriter = new StreamWriter (FilePath, true))

                {

                    streamWriter.WriteLine (message);

                    streamWriter.Close ();

                }

            }

        }

    }

Notez l'utilisation de la propriété statique nommée FilePath. Pour garantir la sécurité des threads, le lockmot - clé a été utilisé. Une vérification a été effectuée à l'intérieur de la Log()méthode pour vérifier que la valeur de la FilePathpropriété est non nulle et non vide.

N'oubliez pas que lorsque la vitesse d'application est essentielle, l'utilisation de méthodes statiques peut être payante. Vous pouvez les utiliser dans des classes statiques et non statiques.