什么是C#中的属性的StructLayoutAttribute效果?

Asa*_*saf 5 c# struct memory-layout

我正在定义要通过不同设备和不同编程语言之间的通信通道接收和发送的结构.为此,我使用StructLayoutAttribute(顺序,pack = 1 - 在重要的情况下)在内存中明确定义它们的布局.

从文档中,我知道当struct只包含字段时它可以工作.它似乎也适用于'简单'属性(使用空get; set;).但是我不知道是不是总是如此.

所以我关于StructLayoutAttribute对属性的影响的问题分为两个:

  1. 简单属性(再次,空get; set;)的行为与字段相同吗?
  2. 其他属性如何表现,例如它们的get是对其他属性的计算的属性?它们是否被忽略(因为我没有看到它们背后的实际数据项)?他们记忆吗?

usr*_*usr 3

属性没有存储空间。StructLayoutAttribute根本不影响他们。

自动属性访问生成的支持字段,该字段受制于StructLayoutAttribute(因为所有字段都受制于该属性)。然而这些字段的顺序没有定义。

由于仅计算值的 get-property 没有存储空间,因此不会对其进行封送。

  • 这意味着 C# 编译器可以自由地将生成的支持字段按照它喜欢的任何顺序放置。这会破坏您似乎需要的顺序属性。CLR 会服从,但 csc.exe 可能不会。 (2认同)