结构-布局.显式-构造函数-完全分配字段
本文关键字:分配 字段 构造函数 布局 显式 结构 | 更新日期: 2023-09-27 18:23:49
为什么我使用:
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"字段:/我知道我可以做一个"Constructor: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"
似乎这是不可能的,关于它的讨论已经结束:
以下是关于这个问题的讨论链接:
https://github.com/dotnet/roslyn/issues/7323
如果定义自定义构造函数,则需要初始化结构的所有字段。有关详细信息,请参阅结构中的MSDN教程,特别是在构造函数和继承标题下。
以下是从该链接中提取的一段内容:
结构可以声明构造函数,但它们必须接受参数。为结构声明默认(无参数)构造函数是错误的。结构成员不能有初始值设定项。总是提供默认构造函数来将结构成员初始化为其默认值。