.NET 中字段初始化器有什么用(除了可读性之外)?

2024-05-01

我只是想了解字段初始值设定项。我遇到了错误 - 字段初始值设定项无法使用非静态字段、方法或属性。在寻找这个答案时我遇到了THIS https://stackoverflow.com/questions/27725571/why-c-sharp-wont-allow-field-initializer-with-non-static-fields/27725641#27725641 post.

这篇文章中获得最多投票的答案表明,在调用构造函数之前,“this”并不存在。有谁知道为什么会这样?为什么在调用字段初始值设定项之前“this”不能存在?

在我看来,来自 C/C++ 背景的“this”仅仅是在堆上分配的一块内存。它必须先存在,然后才能为“this”的任何成员赋值。 (所以它肯定存在于字段初始值设定项之前)。


当一个对象被实例化时,会发生以下情况(简化):

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.NET 中字段初始化器有什么用(除了可读性之外)? 的相关文章

随机推荐