2009-03-04 80 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中看到的那樣。

相關問題