是否有任何開銷使用以下語法時才:C#對象聲明
Form1 myForm = new Form1();
myForm.Show();
至於反對:
Form1 myForm;
myForm = new Form1();
myForm.Show();
當我學習VB6,有人告訴我做quivelent在VB中有一個開銷 - 在.NET中是一樣的嗎?
是否有任何開銷使用以下語法時才:C#對象聲明
Form1 myForm = new Form1();
myForm.Show();
至於反對:
Form1 myForm;
myForm = new Form1();
myForm.Show();
當我學習VB6,有人告訴我做quivelent在VB中有一個開銷 - 在.NET中是一樣的嗎?
.Net中沒有區別。
但在VB6 As New
是邪惡的。它有一個special meaning:它創建了一個自動實例化變量。你永遠無法得到這些變量的空引用異常。 VB6運行時會自動爲您創建一個新的對象實例。
Dim x As New Foo
x.Bar = 10 ' creates a new Foo '
Set x = Nothing ' destroys the first Foo'
x.Bar = 20 ' NO ERROR - creates a second Foo '
此行爲是considered evil由最右邊的思維程序員:我們避免As New
像瘟疫。
但在VB.Net(和C#)有Dim x As New Foo
和Dim x As Foo: Set x = New Foo
不,兩者相同。
我懷疑是否存在,但即使存在,性能開銷也會如此微不足道,以至於通過選擇其中一個而不會有任何可觀的收益。
在後一種情況下,您只實例化了聲明。這沒有什麼重大影響。我在某處讀到.Net對象實例化需要0.000007秒,所以它並不重要,但建議的做法是僅在需要時實例化對象,並在不需要時緩存或不需要緩存。
在釋放模式下編譯時產生的字節碼並可能調試模式)將是相同的。
在此示例中,您將創建一個Form1類型的變量[myForm]併爲其分配內存。
Form1 myForm = new Form1();
在此示例中,第一行創建一個Form1類型的變量,但沒有爲此myForm對象分配內存。
Form1 myForm;
然後每當需要鍵入Form1的新實例的第二行可以使用的在該點處,所述存儲器將被分配給對象myForm會]。
myForm = new Form1();
在我看來,它確實是一個很好的初步實踐到所有變量的申報有類型,然後當你需要一個活的情況下,你可以做你的... OBJ =新Foo1();
之間沒有差異以及不完全 - 你可能想在更高的範圍,申報對象和實例有或配置上的一些事件的對象。在我的應用程序中,我保留了一個prop-grid窗口對象的引用,該對象僅在用戶希望看到prop-grid時才實例化。我將prop-grid對象放置在prop-grid形式的close事件上。 – 2010-04-28 12:11:57
我同意這一點._courious_geek。 +1 – 2010-04-28 12:13:28