Struct – Layout.Explicit – 构造函数 – 完全分配字段
为什么我使用:
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 }
C#说我需要分配’Something’字段:/我知道我可以做一个“构造函数:this()”但是编译器应该知道’Data’字段包含’Something’字段。
所以,我应该先调用无参数构造函数,这是唯一的方法吗?
是的,您需要调用默认构造函数。
public MyStruct (uint pData) : this() { //... }
然后,编译器将在构造函数的开头生成以下IL指令:
ldarg.0 // Push address of struct onto stack initobj MyStruct // Pop address of struct and initialize it with "all zeros"
如果定义自定义构造函数,则需要初始化结构的所有字段。 有关更多信息,请参阅结构中的MSDN教程 – 特别是在构造函数和inheritance标题下。
以下是从该链接中提取的与此相关的段落:
结构可以声明构造函数,但它们必须使用参数。 声明struct的默认(无参数)构造函数是错误的。 Struct成员不能有初始化器。 始终提供默认构造函数以将struct成员初始化为其默认值。