我很惊讶我不能初始化结构中的字段,为什么会这样?像:为什么我不能在我的结构中初始化我的字段?
struct MyStruct
{
private int a = 90;
}
但它是一个complie时间错误。我不知道为什么这是一个问题?请向我解释这一点。
我很惊讶我不能初始化结构中的字段,为什么会这样?像:为什么我不能在我的结构中初始化我的字段?
struct MyStruct
{
private int a = 90;
}
但它是一个complie时间错误。我不知道为什么这是一个问题?请向我解释这一点。
原因主要是表现。考虑以下,
var a = new MyStruct[1000];
如果C#允许在一个结构域的初始化,则初始化将必须进行1000次,一次为阵列中的每个元件。 C#想要避免可能在其他语言中找到的这种隐含行为。
在C#中,struct
无法声明默认构造函数。
编译器将初始化语句移动到构造函数,这在C#中的struct
不会发生。
这是为了表现。当你使用默认的构造函数新建一个结构体时,它所做的只是分配堆栈中的许多字节并将它们初始化为0.
这是因为您的分配实际上由编译器转换为在默认构造函数中完成。但是C#struct
s没有默认的构造函数,正如您在Kent Boogaart发布的link中看到的那样。
Dupe of this thread(http://stackoverflow.com/questions/333829)。 – 2009-03-04 09:29:27