1
157
基类构造函数在派生类构造函数之前被调用,但派生类初始值设定项在基类初始值设定项之前被调用。例如,在以下代码中:
执行顺序为:C、A、B、D。 查看以下2篇msdn文章: |
2
119
试试看:
|
3
45
不要试图记住它,试着向自己解释会发生什么。假设您有一个名为Animal的基类和一个名为Dog的派生类。派生类向基类添加了一些功能。因此,在执行派生类的构造函数时,基类实例必须可用(以便可以向其添加新功能)。这就是为什么构造函数是从基到派生执行的,而析构函数是以相反的方式执行的——首先是派生析构函数,然后是基析构函数。
|
4
25
实际上,派生类构造函数是首先执行的,但是C#编译器会插入对基类构造函数的调用,作为派生构造函数的第一条语句。
|
5
7
正如其他人所说,首先调用基本构造函数。然而,构造函数并不是真正发生的第一件事。 假设你有这样的课程:
首先,字段初始值设定项将按从派生最多的类到派生最少的类的顺序调用。所以第一个字段的初始值设定项
然后将以相反的顺序调用构造函数:First
|
6
5
我说是基地
上面写着:
|
7
3
首先调用基构造函数。但派生类中字段的初始值设定项是首先调用的。 呼叫命令是
(可以将2和3作为一个整体来构造基类。) 取自 CSharp Language Speification 5.0 :
|
8
2
Eric Lippert就对象初始化的相关问题发表了一篇有趣的文章,解释了构造函数和字段初始值设定项排序的原因:
Why Do Initializers Run In The Opposite Order As Constructors? Part One
|
10
1
|
11
0
将首先调用基构造函数,否则,在“其他东西”必须使用基构造函数初始化的成员变量的情况下,将出现编译时错误,因为类成员尚未初始化。 |
12
0
它的工作原理类似于java,
***例外:我可以用super(1,2,3)代替。但是如果我没有显式地调用super,就会调用super()。 |
13
0
构造函数调用从下到上调用(激发),从上到下执行。因此,如果C类继承自B类,B类继承自A类,当您创建C类的实例时,会调用C类的构造函数,C类的构造函数会调用B类的讲师,B类的讲师会再次调用A类的构造函数。现在执行A类的构造函数,然后执行B类的构造函数,然后执行C的构造函数。 |
Haim Ohayon · 这些链接之间有什么区别? 2 年前 |