我很惊讶我无法在结构中初始化我的字段,为什么会这样?像:
struct MyStruct
{
private int a = 90;
}
但这是一个complie时间错误。我不知道为什么这是一个问题?请向我解释一下。
答案 0 :(得分:9)
在C#中,struct
无法声明默认构造函数。
编译器将初始化语句移动到构造函数,而C#中的struct
不会发生这种情况。
答案 1 :(得分:1)
原因主要是表现。请考虑以下内容,
var a = new MyStruct[1000];
如果C#允许初始化结构中的字段,那么初始化必须执行1000次,对于数组中的每个元素执行一次。 C#希望避免在其他语言中可能出现的这种隐式行为。
答案 2 :(得分:1)
这是因为你的赋值实际上是由编译器转换为在默认构造函数中完成的。但是C#struct
没有默认构造函数,你可以在Kent Boogaart发布的link中看到。
答案 3 :(得分:0)
这是为了表现。当您使用默认构造函数创建结构时,它所做的就是在堆栈上分配多个字节并将它们初始化为0.