Les hiérarchies d’héritage profondes ou l’utilisation incorrecte d’héritage peuvent aboutir à un code difficile à maintenir, car il est difficile de suivre les relations entre les classes ou de les étendre sans provoquer de rupture.
Copilot Chat peut suggérer de refactoriser les conceptions basées sur l’héritage en conceptions plus flexibles basées sur la composition (favorisant la composition par rapport à l’héritage). Il peut également recommander l’application de modèles tels que Strategy ou Decorator pour rendre le système plus extensible sans ajouter de complexité à la structure d’héritage.
Exemple de scénario
Le code C# suivant présente une hiérarchie d’héritage profonde où chaque classe s’appuie sur la précédente. Il en résulte une longue chaîne d’héritage. Il est donc difficile de savoir quelles sont les propriétés de chaque classe.
Une telle hiérarchie d’héritage à plusieurs niveaux peut être difficile à comprendre, à modifier et à étendre.
public class Employee
{
public string Name { get; set; }
public int EmployeeID { get; set; }
}
public class Manager : Employee
{
public int NumberOfTeams { get; set; }
}
public class SeniorManager : Manager
{
public string Region { get; set; }
}
public class Director : SeniorManager
{
public int NumberOfDepartments { get; set; }
}
public class VicePresident : Director
{
public string Division { get; set; }
}
public class President : VicePresident
{
public string Company { get; set; }
}
Exemples d’invite
Dans cette situation, vous pouvez décider d’utiliser une classe parent Employee
dont les propriétés doivent être héritées par les autres classes, mais d’éviter tout autre héritage en définissant toutes les autres propriétés séparément pour chaque classe.
Refactor this code so that classes only inherit the properties of the Employee class. All of the other properties that each class currently inherits should instead be declared independently in each class definition.
Exemple de réponse
Note
La réponse suivante est un exemple. Copilot Chat Les réponses ne sont pas déterministes, il est donc possible que vous obteniez une réponse différente de celle présentée ici.
Copilot suggère le code suivant :
public class Employee
{
public string Name { get; set; }
public int EmployeeID { get; set; }
}
public class Manager : Employee
{
public int NumberOfTeams { get; set; }
}
public class SeniorManager : Employee
{
public int NumberOfTeams { get; set; }
public string Region { get; set; }
}
public class Director : Employee
{
public int NumberOfTeams { get; set; }
public string Region { get; set; }
public int NumberOfDepartments { get; set; }
}
public class VicePresident : Employee
{
public int NumberOfTeams { get; set; }
public string Region { get; set; }
public int NumberOfDepartments { get; set; }
public string Division { get; set; }
}
public class President : Employee
{
public int NumberOfTeams { get; set; }
public string Region { get; set; }
public int NumberOfDepartments { get; set; }
public string Division { get; set; }
public string Company { get; set; }
}