2012-07-20 110 views
3

C#將允許使用Object()或Object {}創建對象。是什麼用的對象()和對象{}Object()和Object {}的區別{}

public item getitem() 
{ 

return new item() 

} 

public item getitem() 
{ 

return new item {} 

} 
+0

請參閱:[對象初始值設定項和構造函數有什麼區別?](http://stackoverflow.com/questions/740658/whats-the-difference-between-an-object-initializer-and-a-constructor ?rq = 1) – YetAnotherUser 2012-07-20 16:07:42

+0

我已經知道了,但是現在我從Jon中得知Object {}隱含地調用了參數較少的構造函數。 – amesh 2012-07-20 16:14:42

回答

8

此語法:

new SomeType{} 

object initializer expression這恰好設置沒有屬性。它隱含地調用無參數構造函數。您可以在括號內添加屬性分配:

new SomeType { Name = "Jon" } 

這句法:

new SomeType() 

只是調用參數的構造函數,沒有機會來設置屬性。

注意,您可以明確調用構造函數(paramterized與否)與對象初始化太:

// Explicit parameterless constructor call 
new SomeType() { Name = "Jon" } 

// Call to constructor with parameters 
new SomeType("Jon") { Age = 36 } 

見節以獲取有關對象初始化更多細節C#4規範的7.6.10.2。

我強烈建議,如果你不是設置任何屬性,你只是使用new SomeType()爲清晰起見。使用對象初始值設定項而不設置任何屬性是很奇怪的。

+0

你能解釋一下你的最後一點嗎?這兩個例子的構造函數是什麼樣的? – Peter 2012-07-20 16:09:30

+3

@Peter:會有一個沒有參數的構造函數和一個帶有字符串參數的構造函數。他們是完全正常的構造函數。類型本身不需要知道是否正在使用對象初始值設定項。 – 2012-07-20 16:10:30

6

item()調用默認的構造函數的區別,而item {}調用默認的構造函數,並允許使用(空在這種情況下)object initializer

1

new item {}使用object initializer。在你的例子中,沒有什麼區別,但是如果你不想實際使用對象初始值設定項,通常你只需要調用new item()

相關問題