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

本文关键字:基类 构造函数 调用 为什么不 | 更新日期: 2023-09-27 18:31:54

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

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

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

我认为

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

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. 

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