關於C#中 struct使用new 初始化

https://blog.csdn.net/u014732824/article/details/84325194

C#中對於struct我們進行初始化時可以使用new 語句

例如有一個結構體Point

struct Point

{

float  x;

float y;

}

我們將其實例化時可以使用語句:

Point p = new Point();

這不同於類使用new 語句,我們知道對一個類使用new語句會在託管堆上分配空間,而struct是值類型所以應該在棧上爲其分配空間。

實際上,以上語句的功能與

Point P; 功能基本相同,不同的是使用new 語句,C#會認爲接口體中的成員已經得到初始化,此時x,y會被初始化爲默認值0.

如果不使用new 語句,x,y的值可能未知。

看一個例子:

Point p = new Point();

float a = p.x;  ///////////編譯通過,a的值爲0

Point p;

foalt a = p.x; ////////////編譯不過,編譯器認爲p的字段未得到初始化
 

聲明結構的默認(無參數)構造函數是錯誤的。總是提供默認構造函數以將結構成員初始化爲它們的默認值。在結構中初始化實例字段也是錯誤的。 如果使用 new 運算符創建結構對象,則會創建該結構對象,並調用適當的構造函數。與類不同,結構的實例化可以不使用 new 運算符。如果不使用 new,則在初始化所有字段之前,字段都保持未賦值狀態且對象不可用。 結構類型使用new不會分配託管堆分配內存而是調用構造函數初始化字段。結構的構造函數要麼是有參數的,不可能是無參數,應爲無參數是系統自己隱式添加的,就算有另外的構造函數,如果你顯示的聲明一個無參數的構造函數在結構裏,將導致編譯錯誤。 結構體如果不用new初始化,也可以,但是在其使用前必須手動初始化他的每一個成員,否則編譯器將報錯。用new初始化,可自動將其中的每一個成員都置爲零值

發佈了113 篇原創文章 · 獲贊 20 · 訪問量 36萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章