为什么不首先调用基类构造函数

时间:2012-04-21 00:30:55

标签: c# .net clr

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

我很乐意在这里提供一些代码示例,但我会从手机上发布这个问题。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分: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. 

将没有完全构建的对象填充到全局状态是有风险的,但不是非法的。