Skip to main content

Упрощение сложных иерархий наследования

Copilot Chat поможет вам рефакторинг кода, чтобы избежать классов с несколькими уровнями наследования.

Глубокие иерархии наследования или неправильное использование наследования могут привести к коду, который трудно поддерживать, что затрудняет выполнение связей между классами или расширение их без возникновения разрыва.

Copilot Chat может предложить рефакторинг проектов на основе наследования в более гибкие макеты на основе композиции (предпочитая композицию по наследованию). Кроме того, рекомендуется применять такие шаблоны, как Стратегия или Декоратор, чтобы сделать систему более расширяемой, не добавляя сложности в структуру наследования.

Пример сценария

Следующий код C# имеет глубокую иерархию наследования, где каждый класс строится на предыдущем. Результатом является длинная цепочка наследования, которая затрудняет знание свойств каждого класса.

Иерархия наследования нескольких уровней может быть сложной для понимания, изменения и расширения.

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; }
}

Пример запроса

В этой ситуации можно использовать родительский Employee класс, свойства которого другие классы должны наследовать, но чтобы избежать любого другого наследования, определив все остальные свойства отдельно для каждого класса.

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.

Пример отклика

Note

The following response is an example. Copilot Chat responses are non-deterministic, so you may get a different response from the one shown here.

Copilot предлагает следующий код:

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; }
}

Дополнительные материалы