3

当使用简单的语法通过直接为派生类字段赋值来初始化派生类字段时,编译器会发出一个 IL 代码,该代码首先初始化派生类字段,然后调用基类 .ctor。为什么它不调用基 .ctor 字段并初始化派生类字段。如果我的字段依赖于基类的字段怎么办?

我很想在这里放一些代码示例,但我是从我的手机上发布这个问题的。

4

2 回答 2

3

我认为这是因为它需要处理在构造函数中调用虚拟方法或初始化程序的情况。

于 2012-04-21T00:47:07.327 回答
2

Eric Lippert 在他的博客上有一个由两部分组成的系列。

http://blogs.msdn.com/b/ericlippert/archive/2008/02/15/why-do-initializers-run-in-the-opposite-order-as-constructors-part-one.aspx

只是为了您的方便而在这里提及。希望这可以帮助。

Calling methods on derived types from constructors is dirty pool, but it is not illegal. 

将不完全构造的对象填充到全局状态是有风险的,但并不违法。

于 2012-04-21T03:57:02.587 回答