English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Structure C#

 En C#, la structure est un type de données de type valeur pour la représentation des structures de données. Elle peut inclure des constructeurs paramétrés, des constructeurs statiques, des constantes, des champs, des méthodes, des propriétés, des indexeurs, des opérateurs, des événements et des types imbriqués.

La structure peut être utilisée pour stocker des valeurs de données petites et non nécessitant d'hériter, telles que des points de coordonnées, des paires clé-valeur et des structures de données complexes.

Déclaration de structure

La déclaration struct utilise le mot-clé struct. Le modificateur par défaut est le modificateur interne pour la structure et ses membres.

L'exemple suivant déclare la structure de la carte des coordonnées.

struct Coordinate
{
    public int x;
    public int y;
}

Comme pour les variables de types de base, vous pouvez créer des objets struct sans ou avec l'opérateur new.

struct Coordinate
{
    public int x;
    public int y;
}
Coordinate point = new Coordinate();
Console.WriteLine(point.x); //Sortie : 0  
Console.WriteLine(point.y); //Sortie : 0

Above, create an object of the Coordinate (coordinate) structure using the new keyword. It calls the structure's default parameterless constructor, which initializes all members to the default value of their specified data type.

Si vous déclarez une variable de type struct sans utiliser le mot-clé new, elle ne fait pas appel à aucun constructeur, donc tous les membres restent dans un état non assigné. Par conséquent, vous devez assigner des valeurs à chaque membre avant de les accéder, sinon vous obtiendrez une erreur à la compilation.

struct Coordinate
{
    public int x;
    public int y;
}
Coordinate point;
Console.Write(point.x); // Erreur à la compilation  
point.x = 10;
point.y = 20;
Console.Write(point.x); //Sortie :10  
Console.Write(point.y); //Sortie :20

Constructeur de structure

La structure (struct) ne peut pas inclure de constructeur sans paramètres. Elle ne peut inclure que des constructeurs paramétrés ou des constructeurs statiques.

struct Coordinate
{
    public int x;
    public int y;
    public Coordinate(int x, int y)
    {
        this.x = x;
        this.y = y;
    }
}
Coordinate point = new Coordinate(10, 20);
Console.WriteLine(point.x); //Sortie :10  
Console.WriteLine(point.y); //Sortie :20

Il faut inclure tous les membres de la structure dans le constructeur paramétré et les attribuer aux membres ; sinon, si tout membre reste non attribué, le compilateur C# donnera une erreur à la compilation.

Méthodes et propriétés de la structure

La structure (struct) peut inclure des propriétés, des propriétés auto-réalisées, des méthodes, etc., comme pour les classes.

struct Coordinate
{
    public int x { get; set; }
    public int y { get; set; }
    public void SetOrigin()
    {
        this.x = 0;
        this.y = 0;
    }
}
Coordinate point = Coordinate();
point.SetOrigin();
Console.WriteLine(point.x); //Sortie : 0  
Console.WriteLine(point.y); //Sortie : 0

Le struct suivant inclut des méthodes statiques.

struct Coordinate
{
    public int x;
    public int y;
    public Coordinate(int x, int y)
    {
        this.x = x;
        this.y = y;
    }
    public static Coordinate GetOrigin()
    {
        return new Coordinate();
    }
}
Coordinate point = Coordinate.GetOrigin();
Console.WriteLine(point.x); //Sortie : 0  
Console.WriteLine(point.y); //Sortie : 0

Événement de structure

Les structures peuvent inclure des notifications d'événement pour informer les abonnés des opérations certaines. La structure (struct) suivante contient un événement.

struct Coordinate
{
    private int _x, _y;
    public int x 
    {
        get{
            return _x;
        }
        set{
            _x = value;
            CoordinatesChanged(_x);
        }
    }
    public int y
    {
        get{
            return _y;
        }
        set{
            _y = value;
            CoordinatesChanged(_y);
        }
    }
    public event Action<int> CoordinatesChanged;
}

La structure ci-dessus contient l'événement coordinateChanged, qui est déclenché lorsque les coordonnées x ou y changent. Le prochain exemple montre comment traiter l'événement CoordinateChanged.

class Program
{
    static void Main(string[] args)
    {
        Coordinate point = new Coordinate();
        
        point.CoordinatesChanged += StructEventHandler;
        point.x = 10;
        point.y = 20;
    }
    static void StructEventHandler(int point)
    {
        Console.WriteLine("Le coordonnées changent en {0}", point);
    }
}

La structure est un type de valeur, donc elle est plus rapide que l'objet de classe. Utilisez la structure chaque fois que vous ne souhaitez stocker que des données. Souvent, les structures sont adaptées à la programmation des jeux. Cependant, il est plus facile de transmettre des objets de classe que des structures. Par conséquent, n'utilisez pas de structure lorsque vous transmettez des données via un réseau ou d'autres classes.

Résumé

  • La structure peut inclure des constructeurs, des constantes, des champs, des méthodes, des propriétés, des indexeurs, des opérateurs, des événements et des types imbriqués.

  • La structure ne peut pas contenir de constructeur sans paramètres ni destructeur.

  • La structure peut réaliser les mêmes interfaces que la classe.

  • La structure ne peut pas hériter d'une autre structure ou d'une classe, ni être utilisée comme classe de base.

  • La structure ne peut pas spécifier de membres abstraits, membres verrouillés, membres virtuels ou membres protégés.