目录

C成员赋值初始化和构造函数初始化的区别

『C#』成员赋值初始化和构造函数初始化的区别?

本文最后更新于 2019年 5月 6号 凌晨 2点 16分 ,并同步发布于 :


大家都知道设置类成员的初始值有两种方法 :

成员初始化语法

https://i-blog.csdnimg.cn/blog_migrate/6793e3170da9d287c639c9ec6acfa5f4.png

构造函数

https://i-blog.csdnimg.cn/blog_migrate/a2e7e8d7d3c2dc992c52c40097b93d8e.png


那么这两种方式有什么区别 ?

我们先看一下反编译后的代码

反编译前 :

https://i-blog.csdnimg.cn/blog_migrate/298555c527283631740656c629ddcd4b.png

反编译后 :

https://i-blog.csdnimg.cn/blog_migrate/dcf10ac22d854b723199710454c30844.png

这看起来没什么变化啊 ! (#掀桌)


看来只有看一下反编译之后的 IL 代码了 :

https://i-blog.csdnimg.cn/blog_migrate/75eb01fafeb07d1851d1502eaad54417.png

我们发现 赋值初始化的代码被移动到了构造函数中,并且在调用基类构造函数之前执行。而原本构造函数中的代码则在调用基类构造函数之后执行。

反编译后的代码完美解释了以下结论 :

  • 成员赋值初始化 先于 构造函数
  • 成员赋值初始化 先从 派生类 再到 基类

详细的成员初始化顺序请参考另一篇文章

—END—