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 :
-
Organisation du code : séparer une grande classe en plusieurs fichiers pour plus de lisibilité.
-
Travail en équipe : plusieurs développeurs peuvent travailler sur différentes parties d'une même classe sans conflit.
-
Code généré automatiquement : certains outils (comme les designers WinForms, Entity Framework, etc.) génèrent une partie de la classe automatiquement, et vous pouvez ajouter votre propre code dans une autre partie.
🧱 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
-
Toutes les parties doivent avoir le même modificateur d’accès (
public
,internal
, etc.). -
Elles doivent toutes utiliser le mot-clé
partial
. -
Elles doivent être dans le même namespace.
-
Elles peuvent contenir des constructeurs, champs, méthodes, propriétés, etc.
⚙️ Cas d'usage typique : générateurs de code
Par exemple, dans les projets Windows Forms ou WPF :
-
Le designer crée une partie de la classe (
partial class
) avec la définition de l'interface utilisateur. -
Vous ajoutez votre logique métier dans un autre fichier avec la même classe
partial
.
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
-
Tu ne peux pas séparer un même constructeur entre plusieurs fichiers. Un constructeur doit être défini entièrement dans un seul fichier.
-
Mais tu peux avoir plusieurs constructeurs, chacun dans des fichiers différents.
💡 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.