Строительный шаблон проектирования C# - PullRequest
0 голосов
/ 05 апреля 2020

есть понятие о наследовании, которое я не совсем понимаю. У меня есть

    protected DeveloperReport DeveloperReport; // Field
  1. Разве PersonalInfoBuilder не сможет получить доступ к этому полю?

  2. Если да,

    public PersonalInfoBuilder MyPersonalInfo => new PersonalInfoBuilder(DeveloperReport);   
    

    Почему мне все еще нужно передать DeveloperReport (поле) в конструктор PersonalInfoBuilder, когда я могу просто изменить защищенное поле DeveloperReport с помощью вызов нового PersonalInfoBuilder () вместо нового PersonalInfoBuilder (DeveloperReport)?

  3. И как концепция «вернуть это» возвращает изменения, сделанные в DeveloperReport (поле), обратно в DeveloperReportBuilder?

Спасибо!

    class DeveloperReport
    {
        // Properties
        public int Id { get; set; }
        public string Name { get; set; }
        public DeveloperLevel Level { get; set; }
        public int WorkingHours { get; set; }
        public int HourlyRate { get; set; }

        // Methods
        public double CalculateSalary() => WorkingHours * HourlyRate;
    }

    class DeveloperReportBuilder
    {
        protected DeveloperReport DeveloperReport;

        public PersonalInfoBuilder MyPersonalInfo => new PersonalInfoBuilder(DeveloperReport);

        public DeveloperReportBuilder()
        {
            DeveloperReport = new DeveloperReport();
        }

        // return developer report.
        public DeveloperReport Build() => DeveloperReport;
    }

    class PersonalInfoBuilder : DeveloperReportBuilder
    {
        public PersonalInfoBuilder(DeveloperReport report)
        {
            DeveloperReport = report;
        }

        public PersonalInfoBuilder()
        {

        }

        public PersonalInfoBuilder NameIs(string name)
        {
            DeveloperReport.Name = name;
            return this;
        }

        public PersonalInfoBuilder IDis(int id)
        {
            DeveloperReport.Id = id;
            return this;
        }
    }

1 Ответ

2 голосов
/ 05 апреля 2020

Экземпляр отчета необходимо передать только в том случае, если вы хотите, чтобы оба экземпляра DeveloperReportBuilder и PersonalInfoBuilder имели доступ к одинаковому экземпляру DeveloperReport.

Наследование не будет копировать значения экземпляра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...