Struct - Layout.Explicit - 构造函数 - 完全分配字段

apo*_*pse 8 c# struct

为什么我使用:

struct MyStruct
{
        [FieldOffset (0)] public uint Data;
        [FieldOffset (0)] public byte Something;
}

public MyStruct (uint pData)
{
   Data = pData; // setting Data field also sets Something field
}
Run Code Online (Sandbox Code Playgroud)

C#说我需要分配'Something'字段:/我知道我可以做一个"构造函数:this()"但是编译器应该知道'Data'字段包含'Something'字段.

所以,我应该先调用无参数构造函数,这是唯一的方法吗?

Mår*_*röm 6

是的,您需要调用默认构造函数.

public MyStruct (uint pData) : this()
{
   //...
}
Run Code Online (Sandbox Code Playgroud)

然后,编译器将在构造函数的开头生成以下IL指令:

ldarg.0           // Push address of struct onto stack
initobj MyStruct  // Pop address of struct and initialize it with "all zeros"
Run Code Online (Sandbox Code Playgroud)


Sam*_*ade -2

如果定义自定义构造函数,则需要初始化结构体的所有字段。有关详细信息,请参阅结构中的MSDN 教程 - 特别是在“构造函数和继承”标题下。

以下是从该链接中摘录的一段与此相关的段落:

结构可以声明构造函数,但它们必须带有参数。为结构声明默认(无参数)构造函数是错误的。结构成员不能有初始值设定项。始终提供默认构造函数来将结构成员初始化为其默认值。