TOC

This article is currently in the process of being translated into French (~99% done).

Classes:

Static members

Comme nous avons vu au chapitre précédent, la manière usuelle de communiquer avec une classe c'est de créer une instance de cette classe et de travailler ensuite sur l'objet qui en résulte. Dans la plupars des cas, c'est ça le role des classes; l'abilité de créer des instances multiples d'une même classe et de les utiliser ensuite de façons différentes. Cependant, dans certains cas, vous pourriez desirer d'avoir une classe que vous pouvez utiliser sans en créer une instance, ou au moins une classe dont vous pouvez utiliser les membres sans en créer un objet. Par exemple, vous pouvez avoir une classe où une variable reste toujours la même quel que soit l'endroit où la maniere dont elle est utilisée. Ceci est appelé un membre statique, parce que ça reste le même.

Une classe peut être statique, et elle peut avoir des membres statiques, comprenant fonctions et membres. On ne peut pas créer d'instances d'une classe statique, ou en d'autres termes, une telle classe fonctionne plus comme un groupement de membres associés que comme une classe réelle. A contrario, vous pouvez choisir de créer une classe non-statique, et lui définir certains membres statiques. On peut créer des instances d'une classe non-statique et l'utiliser comme une classe régulière, mais on ne peut pas utiliser un membre statique dans un objet de cette classe. Une classe statique ne peut contenir que des membres statiques.

D'abord, voici un exemple d'une classe statique:

public static class Rectangle
{
    public static int CalculateArea(int width, int height)
    {
        return width * height;
    }
}

Comme on peut le voir, on utilise le mot-clé static pour marquer la classe comme statique, et puis on l'utilise de nouveau pour également marquer la méthode, CalculateArea, comme statique. Si on ne le fait pas, le compilateur objecterait, puisqu'il n'est pas permis d'avoir un membre non-statique dans une classe statique.

Pour utiliser cette méthode, on l'appelle directement sur la classe, comme ceci:

Console.WriteLine("The area is: " + Rectangle.CalculateArea(5, 4));

On pourrait ajouter d'autres méthodes utiles à la classe Rectangle, mais peut être vous vous demandez pourquoi nous transmettons largeur (width) et hauteur (height) pour la méthode même, plutôt que de les enregistrer dans la classe et de les en retirer quand on en a besoin? Parce que c'est statique! On pourrait les enregistrer, mais seulement un seul groupe de dimensions, parce qu'il y a seulement une seule version d'une classe statique. Ceci est un point très important à comprendre.

Par contre, on peut rendre la classe non-statique, et alors avoir la méthode CalculareArea comme une fonction utilitaire dans cette classe.

public class Rectangle
{
    private int width, height;

    public Rectangle(int width, int height)
    {
        this.width = width;
        this.height = height;
    }

    public void OutputArea()
    {
        Console.WriteLine("Area output: " + Rectangle.CalculateArea(this.width, this.height));
    }

    public static int CalculateArea(int width, int height)
    {
        return width * height;
    }
}

Comme on peut le voir, on a rendu la classe non-statique. On a également ajouté un constructeur (constructor), qui prend une largeur et une hauteur et les assigne à l'instance. Puis on a ajouté une méthode OutputArea, qui utilise la méthode statique pour calculer l'aire. C'est un bon exemple de mélange de membres statiques et de membres non-statiques dans une classe non statique.

Un usage commun de classes statiques, bien que mal vu par certains, est celui de classes d'utilité/aide, où on met en groupe un certain nombre de méthodes utiles, qui pourraient ne pas appartenir ensemble, mais qui ne semblent pas appartenir ailleurs non plus.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!