En C#, "class partial"

En C#, le mot-clé partial permet de diviser la définition d'une classe (ou d'une structure ou d'une interface) en plusieurs fichiers sources. Chaque fichier peut contenir une partie de la classe, et le compilateur les réunit automatiquement lors de la compilation.


✅ Pourquoi utiliser partial ?

Voici quelques raisons :


🧱 Exemple simple

Fichier 1 : Person.Part1.cs

public partial class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

Fichier 2 : Person.Part2.cs

public partial class Person
{
    public string GetFullName()
    {
        return $"{FirstName} {LastName}";
    }
}

➡️ À la compilation, c’est comme si on avait une seule classe Person regroupant toutes les parties.


🔒 Règles importantes


⚙️ Cas d'usage typique : générateurs de code

Par exemple, dans les projets Windows Forms ou WPF :


Une classe partial peut avoir un ou plusieurs constructeurs, comme une classe normale.

Mais attention à ces points importants :


✅ 1. Tu peux définir un constructeur dans une ou plusieurs parties

Chaque fichier partial peut définir un constructeur, et le compilateur les combine comme s’ils étaient dans une seule classe.

Exemple :

User.Part1.cs
public partial class User
{
    public string Name { get; set; }

    public User(string name)
    {
        Name = name;
    }
}
User.Part2.cs
public partial class User
{
    public void SayHello()
    {
        Console.WriteLine($"Hello, {Name}!");
    }
}

➡️ Tu peux instancier la classe User comme d'habitude :

var user = new User("Alice");
user.SayHello(); // Hello, Alice!

✅ 2. Tu peux aussi avoir plusieurs constructeurs (surcharges)

C’est tout à fait autorisé, même répartis sur différents fichiers :

User.Part3.cs
public partial class User
{
    public User()
    {
        Name = "Default";
    }
}

➡️ Le compilateur gère tout comme s’ils étaient ensemble dans un seul fichier.


⚠️ Attention


💡 Astuce

Les classes partial sont surtout utiles quand une partie est générée automatiquement (par un outil) et que tu veux ajouter ta propre logique sans toucher au code généré. Tu peux alors ajouter tes constructeurs ou méthodes dans un autre fichier.