Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在构造函数链接中使用base和this_C#_Constructor - Fatal编程技术网

C# 在构造函数链接中使用base和this

C# 在构造函数链接中使用base和this,c#,constructor,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 re

假设有一个名为
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;
}
以及一个类
Manager
,该类继承自
Employee
,其构造函数如下

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
对象的构造将包括七个“点击”。既然经理继承自员工,这是否意味着每一个经理对象都是“出生”为员工,然后成为经理?在它成为管理器之后,您只需要添加两个字段,而不是七个?

是的,就是这样


构造函数参数自下而上流动,然后自上而下创建对象。如果派生类需要访问其构造函数中的基类成员,则必须这样做。

在.NET中,在调用任何构造函数之前创建完整的对象。接下来,调用基本构造函数,然后调用派生类构造函数

因此答案是否定的——经理对象不是作为员工出生的,而是后来成为经理的。相反,管理器对象是作为管理器对象生成的。。。在调用构造函数之前


BTW,在非托管C++中,情况正好相反,尽管为派生类分配了足够的内存,但首先创建了Engor对象(调用Enger-Engulor),并且调用的任何虚拟方法都会导致对基类方法体的分发。然后构建Manager类。

我不知道“将包括七个‘点击’是什么意思。如果
Employee
的唯一构造函数是您展示的两个,那么您必须使用链接-如果您没有显式调用
base(…)
,编译器将插入对基类的无参数构造函数的调用-如果没有这样的构造函数,这将是一个错误。我相信,根据这本书,对继承的初始化成员的调用数。