简体   繁体   English

生成器设计模式 C#

[英]Builder Design Pattern C#

there is a concept about inheritance which I do not quite understand.有一个关于 inheritance 的概念,我不太明白。 I have a我有一个

    protected DeveloperReport DeveloperReport; // Field
  1. Wouldn't PersonalInfoBuilder be able to access that field? PersonalInfoBuilder 不能访问该字段吗?

  2. If yes,如果是,

     public PersonalInfoBuilder MyPersonalInfo => new PersonalInfoBuilder(DeveloperReport);

    Why do I still have to pass the DeveloperReport(field) into PersonalInfoBuilder constructor, when I can just modify the protected DeveloperReport field by calling new PersonalInfoBuilder(), instead of new PersonalInfoBuilder(DeveloperReport)?为什么我仍然必须将 DeveloperReport(field) 传递给 PersonalInfoBuilder 构造函数,而我可以通过调用 new PersonalInfoBuilder() 而不是 new PersonalInfoBuilder(DeveloperReport) 来修改受保护的 DeveloperReport 字段?

  3. And, how the concept of "return this" return the changes made to DeveloperReport(field) back to DeveloperReportBuilder?而且,“返回这个”的概念如何将对 DeveloperReport(field) 所做的更改返回给 DeveloperReportBuilder?

Thanks !谢谢 !

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

You only have to pass the report instance if you want to have both instances of DeveloperReportBuilder and PersonalInfoBuilder have acces to the same instance of DeveloperReport .如果您希望DeveloperReportBuilderPersonalInfoBuilder的两个实例都可以访问相同DeveloperReport实例,则只需传递报表实例。

Inheritance will not copy the instance values. Inheritance 不会复制实例值。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM