有什麼區別:C#對象實例化
Object o = new Object();
o.foo();
和
new Object().foo();
(假設我不需要參考之後)?
是否有任何理由使用一個而不是另一個(例如內存使用情況)?
有什麼區別:C#對象實例化
Object o = new Object();
o.foo();
和
new Object().foo();
(假設我不需要參考之後)?
是否有任何理由使用一個而不是另一個(例如內存使用情況)?
在執行方面沒有任何區別。
有可以在調試方面的差異:
foo()
之前被稱爲NullReferenceException
s,如果在同一語句中有多個解除引用操作可能會非常棘手)。我絕對不說,你應該總是拆東西展現出來 - 只是它可以是用於調試。
如果以後不需要實例,則沒有區別。
如果你不需要o
後綴,那麼沒有區別。 (JIT)編譯器可能將它們視爲相同。
所以這是一個品味問題。在這種情況下,我對第一個樣本略有偏好,但有時第二個樣本的流暢符號更具可讀性。
沒有區別。
要探測它,你可以編譯兩個代碼(發佈模式),用ildasm檢查它們,你會看到生成的字節代碼是相同的。
編輯:實際上,我有時會發現更容易調試時聲明變量。更容易檢查,因此更容易調試。
編輯:刪除不正確的代碼
不同的是,在第一種情況下,你可以看到在調試器創建的對象。
您可以重複使用它。 – Femaref 2010-04-28 12:00:22
@Femaref:什麼? – user1112111 2010-04-28 12:04:04
@Daniel Rose:實際上這不會編譯,應該爲擁有'foo'方法的類創建一個類,但是謝謝你的答案 – user1112111 2010-04-28 12:04:59
Skeet先生,你再次擊中! – user1112111 2010-04-28 12:12:40
另一個區別是 - 一旦聲明 - 你不能在同一個範圍內再次使用變量名o。可能是一個有爭議的問題,但仍然存在差異。 – Jono 2010-04-28 12:29:12
@Jono,認爲範圍你真的是指聲明空間。 http://blogs.msdn.com/ericlippert/archive/2009/08/03/what-s-the-difference-part-two-scope-vs-declaration-space-vs-lifetime.aspx – Fede 2010-04-28 12:57:08