CodeGym /Cours /C# SELF /Structures en C#

Structures en C#

C# SELF
Niveau 10, Leçon 2
Disponible

1. Introduction

Structure — c'est un type de données spécial en C# qui te permet de regrouper plusieurs valeurs (même de types différents) dans une seule "boîte". C'est un peu comme un mini set de LEGO : tu assembles les pièces et au final tu obtiens un objet pratique et compact.

Les structures ressemblent aux classes, mais elles ont leurs propres particularités, et on les utilise pour des cas plus "simples", quand t'as pas besoin de toute la puissance et la "lourdeur" des classes.

Syntaxe


struct Point
{
    public int X;
    public int Y;
}
Déclaration de la structure Point

Dans cet exemple, on a décrit une structure pour un point sur un plan avec les coordonnées X et Y.

Où on utilise les structures ?

Le plus souvent, on utilise les structures pour des petits objets simples qui doivent être super légers et "juste des données".

En C#, certains types standards sont des structures :

  • int, double, bool, DateTime, TimeSpan, decimal, Guid
  • et même, par exemple, ConsoleKeyInfo ou Point (dans les bibliothèques graphiques)

Différences entre structures et classes

Critère Structure Classe
Mot-clé
struct
class
Type de stockage Value Type Reference Type
Stocké dans La pile (zone mémoire) Le tas (zone mémoire)
Passage en méthode Par valeur (copie) Par référence
Héritage Non (sauf interfaces) Oui
Peut être null Non (seulement Nullable) Oui
Par défaut Initialisation implicite de tous les champs à zéro Seulement via le constructeur

2. Déclaration et utilisation des structures

Tu peux déclarer une structure à l'intérieur ou à l'extérieur d'une classe :


struct Rectangle
{
    public int Width;
    public int Height;
}

Création et utilisation :

Rectangle r;
r.Width = 10;
r.Height = 5;
Console.WriteLine($"Surface : {r.Width * r.Height}");

Tu peux aussi utiliser un constructeur :

struct Point
{
    public int X;
    public int Y;

    // Constructeur
    public Point(int x, int y)
    {
        X = x;
        Y = y;
    }
}

var p = new Point(3, 7);
Console.WriteLine($"Point : ({p.X}, {p.Y})");

Quand c'est mieux d'utiliser une structure ?

  • Pour des petits "paquets" de données (genre coordonnées, couleur, intervalle, date et heure).
  • Quand la compacité et la perf sont importantes (genre des millions de points dans un tableau).
  • Quand l'objet doit se comporter comme une seule valeur (copy-paste — c'est vraiment une copie !).

Faut pas utiliser une structure si l'objet :

  • Peut être gros (beaucoup de champs).
  • Doit faire partie d'une hiérarchie d'héritage.
  • Doit souvent être modifié par référence.

3. Particularités et "pièges" des structures

Copie

Point p1 = new Point(1, 2);
Point p2 = p1; // on crée une COPIE !
p2.X = 100;

Console.WriteLine(p1.X); // 1 — n'a pas changé !
Console.WriteLine(p2.X); // 100
Copier une structure crée une copie indépendante

Valeurs implicites par défaut

Point p; // les champs X et Y = 0, même si t'as rien assigné !

Peut être Nullable

Pour stocker null, il faut utiliser la syntaxe spéciale nullable — tu mets un point d'interrogation après le nom du type. Comme ça, tu pourras assigner null à la variable.

Point? p = null;
if (p == null)
    Console.WriteLine("Pas de point");

4. Structures avec propriétés automatiques et méthodes

Les structures peuvent avoir des méthodes, des propriétés, des événements et même des membres statiques.

public struct Range
{
    public int Start { get; set; }
    public int End { get; set; }

    public int Length => End - Start;

    public override string ToString() => $"[{Start}..{End}]";
}

Exemple : structure pour les nombres complexes

Structure pour les nombres complexes avec une méthode et override de ToString()


        struct Complex
{
    public double Re;
    public double Im;

    public Complex(double re, double im)
    {
        Re = re;
        Im = im;
    }

    public double Abs() => Math.Sqrt(Re * Re + Im * Im);

    public override string ToString() => $"{Re} + {Im}i";
}

var z = new Complex(1, 2);
Console.WriteLine(z);          // 1 + 2i
Console.WriteLine(z.Abs());    // 2.236...
2
Mission
C# SELF, niveau 10, leçon 2
Bloqué
Création d'une structure simple pour stocker les coordonnées d'un point
Création d'une structure simple pour stocker les coordonnées d'un point
2
Mission
C# SELF, niveau 10, leçon 2
Bloqué
Une structure avec un constructeur et une méthode de calcul de surface
Une structure avec un constructeur et une méthode de calcul de surface
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION