C#將允許使用Object()或Object {}創建對象。是什麼用的對象()和對象{}Object()和Object {}的區別{}
public item getitem()
{
return new item()
}
public item getitem()
{
return new item {}
}
C#將允許使用Object()或Object {}創建對象。是什麼用的對象()和對象{}Object()和Object {}的區別{}
public item getitem()
{
return new item()
}
public item getitem()
{
return new item {}
}
此語法:
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()
爲清晰起見。使用對象初始值設定項而不設置任何屬性是很奇怪的。
你能解釋一下你的最後一點嗎?這兩個例子的構造函數是什麼樣的? – Peter 2012-07-20 16:09:30
@Peter:會有一個沒有參數的構造函數和一個帶有字符串參數的構造函數。他們是完全正常的構造函數。類型本身不需要知道是否正在使用對象初始值設定項。 – 2012-07-20 16:10:30
item()
調用默認的構造函數的區別,而item {}
調用默認的構造函數,並允許使用(空在這種情況下)object initializer。
new item {}
使用object initializer。在你的例子中,沒有什麼區別,但是如果你不想實際使用對象初始值設定項,通常你只需要調用new item()
。
請參閱:[對象初始值設定項和構造函數有什麼區別?](http://stackoverflow.com/questions/740658/whats-the-difference-between-an-object-initializer-and-a-constructor ?rq = 1) – YetAnotherUser 2012-07-20 16:07:42
我已經知道了,但是現在我從Jon中得知Object {}隱含地調用了參數較少的構造函數。 – amesh 2012-07-20 16:14:42