2009-03-04 81 views
2

我很惊讶我不能初始化结构中的字段,为什么会这样?像:为什么我不能在我的结构中初始化我的字段?

struct MyStruct 
{ 
    private int a = 90; 
} 

但它是一个complie时间错误。我不知道为什么这是一个问题?请向我解释这一点。

+0

Dupe of this thread(http://stackoverflow.com/questions/333829)。 – 2009-03-04 09:29:27

回答

1

原因主要是表现。考虑以下,

var a = new MyStruct[1000]; 

如果C#允许在一个结构域的初始化,则初始化将必须进行1000次,一次为阵列中的每个元件。 C#想要避免可能在其他语言中找到的这种隐含行为。

8

在C#中,struct无法声明默认构造函数。

编译器将初始化语句移动到构造函数,这在C#中的struct不会发生。

0

这是为了表现。当你使用默认的构造函数新建一个结构体时,它所做的只是分配堆栈中的许多字节并将它们初始化为0.

1

这是因为您的分配实际上由编译器转换为在默认构造函数中完成。但是C#struct s没有默认的构造函数,正如您在Kent Boogaart发布的link中看到的那样。

相关问题