c# - 在构造函数链中使用 base 和 this

标签 c# constructor

假设有一个名为 Employee 的基类,如下所示

public Employee(string name, int id, float pay)
    : this(name, 0, id, pay, "") { }
public Employee(string name, int age, int id, float pay, string ssn)
{
    // Better!  Use properties when setting class data.
    // This reduces the amount of duplicate error checks.
    Name = name;
    Age = age;
    ID = id;
    Pay = pay;
    SocialSecurityNumber = ssn;
}

还有一个继承自 Employee 的类 Manager,其构造函数如下

public Manager(string fullName, int age, int empID,
  float currPay, string ssn, int numbOfOpts)
    : base(fullName, age, empID, currPay, ssn)
{
    .
    StockOptions = numbOfOpts;
}

据我所知,this 关键字就像 base 关键字一样,只是它适用于同一类中的构造函数。我最大的问题是,在阅读一本引用书时,它说如果您不使用链接,Manager 对象的构造将包括七个“命中”。由于 Manager 继承自 Employees,这是否意味着每个 Manager 对象都“出生”为 Employee,然后再成为 Manager?在成为经理之后,您只需添加两个字段而不是七个?

最佳答案

是的,就是这样。

构造器参数从下往上流动,然后从上往下创建对象。它必须像这样,以防派生类需要在其构造函数中访问基类成员。

关于c# - 在构造函数链中使用 base 和 this,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12861454/

相关文章:

c# - 如何使用 ASP.Net Core Identity 从登录用户检索 Google 个人资料图片?

c# - Servicestack - 操作顺序 Fluent 验证和请求过滤器

c# - 此linq查询能否更有效?

c# - 通过在文本框中键入内容来过滤列表框的集合 ViewSource

parameters - 多少个构造函数参数就太多了?

c# - 是否可以从 webbrowser NavigationFailed 事件中导航?

C++ 字符串成员构造

.net - TransactionScopeOption - 必需或 RequiresNew

C++ 在构造函数中删除对象?

android - Kotlin 构造函数属性 val 不能在类中使用