.NET中的字段初始化程序有什么用(除了可读性)?

Sum*_*ith 7 .net language-design

我只是想了解字段初始化器.我遇到了错误 - 字段初始值设定项不能使用非静态字段,方法或道具.在寻找答案的同时,我发现了这篇文章.

对帖子来说,大部分投票的答案表明,在调用构造函数之前,"this"不存在.有谁知道为什么会这样?为什么在调用字段初始值设定项之前不能存在'this'?

在我看来,来自C/C++背景,'this'只是堆上分配的一块内存.并且必须存在才能为"this"的任何成员分配值.(因此它绝对存在于字段初始化器之前).

Joh*_*nne 5

当一个对象被实例化时,后续发生(简化):

  • 内存已分配
  • 字段初始值设定项已执行
  • 创建'this',将所有(非静态)字段链接到此实例

当执行字段初始值设定项时,各个字段尚未链接到实例,因此您不能引用另一个字段(静态字段除外),因为它只能通过'this'实例中的引用(不存在)然而).

为避免混淆,您可以选择不使用字段初始值设定项并初始化构造函数体中的所有字段,但结果是,您始终需要显式声明构造函数.