MSDN 文档告诉您 Microsoft C# 编译器用于struct
. 这些特定细节不在 ECMA 334 C# 规范中;它们不是struct
s 语义的一部分。因此,文档中的那些细节是实现细节。
我似乎记得在某个地方读到 Eric Lippert 说他希望(或者更喜欢,我不记得他提供了何种偏好级别)文档没有提到与struct
s 相关的堆栈。我看看能不能挖出来
这是您链接到的博客文章中的内容:
我很遗憾文档没有关注最相关的内容;通过关注一个很大程度上不相关的实现细节,我们扩大了该实现细节的重要性,并模糊了使值类型在语义上有用的重要性。我非常希望所有解释“堆栈”是什么的文章都花时间解释“按值复制”的确切含义以及误解或误用“按值复制”如何导致错误。
ECMA 334 C# 规范的相关部分是§11。请注意,本节中从未使用过“堆栈”一词。该部分仅说明语法,即struct
s 遵循值语义,它们被隐式密封并继承自System.ValueType
,对类型变量的赋值struct
创建一个副本,将 astruct
作为参数按值传递创建一个副本,如何struct
设置 s为默认值(所有值类型字段struct
都设置为默认值,所有引用类型字段都设置为null
),围绕的装箱和拆箱规则, for的struct
含义,以及字段初始化、构造函数、析构函数和静态构造函数适用于s。同样,没有提到堆栈。曾经。this
struct
struct
堆栈是一个实现细节,而不是struct
.