如何将固定参数传递给基础构造函数

时间:2016-09-10 21:55:13

标签: c# inheritance

什么

我有这样的编码练习,其中基类构造函数应该能够使用输入参数定义自定义属性值,但派生类应该将此属性设置为固定值。

练习文字的片段:

  1. “定义一个班级Manager ...经理也有月度奖金,应该在施工中指定......”
  2. “定义课程DirectorDirector类应该来自Manager类。导演只是一个每月固定奖金为20000的经理......在实施Director课程时,要特别注意正确实施构造函数。 除了构造函数之外,该类还需要什么吗?
  3. 问题

    那么如何通过在这个类中只有一个构造函数来在派生类中设置这个固定值呢?另外:子类对象的创建者根本不能设置此属性(monthlyBonus)。

    尝试

    //Manager inherits Employee (not interesting in this context)
    public Manager(string name, int salaryPerMonth, int monthlyHours, int monthlyBonus) : base(name, salaryPerMonth)
        {
            MonthlyHours = monthlyHours;
            Bonus = monthlyBonus;
        }
    
    public class Director : Manager
    {
        public Director(string name, int salaryPerMonth, int monthlyHours, int monthlyBonus = 20000) : base(name, salaryPerMonth, monthlyHours, monthlyBonus)
        {
            //base.Bonus = 20000;
        }
    }
    
    • 我考虑过删除构造函数中的变量中的monthlyBonus类中的输入参数Director,但是因为基类构造函数首先被调用,所以我猜不行

    • 我还考虑过将输入参数值设置为可选值,但调用者可以更改此值,因此也不接受此值。

2 个答案:

答案 0 :(得分:1)

您可以直接在基础构造函数中传递值

public class Director : Manager
{
    public Director(string name, int salaryPerMonth, int monthlyHours,)  
           :base(name, salaryPerMonth, monthlyHours, 20000)
    { 
    }
}

答案 1 :(得分:1)

简短的回答是你只需要更改构造函数声明:

public Director(string name, int salaryPerMonth, int monthlyHours)
    : base(name, salaryPerMonth, monthlyHours, 20000) { }

即。省略(正如您已经做过的)monthlyBonus参数,并在使用base调用基础构造函数时对值进行硬编码。

由于这显然是一项课堂练习,我鼓励你提出一些问题,重点是你为什么不知道你可以做到这一点,以便你能更好地理解base()构造函数调用工作。

现在,我只是指出它与任何其他方法调用基本相同,并且您可以在任何其他方法调用中使用它执行所有操作。参数可以是您想要的任何表达式;他们不需要在派生的构造函数中重复参数。