簡體   English   中英

C#中對象實例化之間的區別:將對象存儲在引用中與直接調用方法

[英]Diferences between object instantiation in C#: storing objects in references vs. calling a method directly

我對C#中的對象聲明有疑問。 我用這個例子解釋我可以做到這一點:

MyObject obj = New MyObject(); 
int a = obj.getInt();

或者我可以做到這一點

int a = new MyObject().getInt();

結果是相同的,但是這些聲明之間是否存在任何區別? (沒有語法)

謝謝。

這不是聲明:它是類實例化。

兩者之間沒有實際的區別:都是關於可讀性和您自己的編碼風格的。

我要補充一點,在少數情況下,您需要聲明對某個對象的引用:這些對象是IDisposable

例如:

// WRONG! Underlying stream may still be locked after reading to the end....
new StreamReader(...).ReadToEnd(); 

// OK! Store the whole instance in a reference so you can dispose it when you 
// don't need it anymore.
using(StreamReader r = new StreamReader(...))
{

} // This will call r.Dispose() automatically

正如一些評論所補充的,在很多情況下,實例化一個類並將對象存儲在引用(變量)中將是更好/最優的, 但是對於您的簡單示例,我相信差異還不夠,並且仍然是編碼風格/可讀性的問題

主要是語法。

主要區別在於您不能在第二個示例中使用MyObject實例。 另外,它可能會立即被提名垃圾收集。

不,從技術上講,它們是相同的。

在這種情況下,我建議考慮的唯一事情是,好像該函數實際上不需要實例創建一樣,您可以考慮將其聲明為靜態,因此可以像下面這樣簡單地調用它:

int a = MyObject.getInt();

但這自然取決於具體的實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM