2010-04-28 147 views
5

是否有任何開銷使用以下語法時才:C#對象聲明

Form1 myForm = new Form1(); 
myForm.Show(); 

至於反對:

Form1 myForm; 
myForm = new Form1(); 
myForm.Show(); 

當我學習VB6,有人告訴我做quivelent在VB中有一個開銷 - 在.NET中是一樣的嗎?

回答

5

.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 FooDim x As Foo: Set x = New Foo

0

我懷疑是否存在,但即使存在,性能開銷也會如此微不足道,以至於通過選擇其中一個而不會有任何可觀的收益。

1

在後一種情況下,您只實例化了聲明。這沒有什麼重大影響。我在某處讀到.Net對象實例化需要0.000007秒,所以它並不重要,但建議的做法是僅在需要時實例化對象,並在不需要時緩存或不需要緩存。

+3

之間沒有差異以及不完全 - 你可能想在更高的範圍,申報對象和實例有或配置上的一些事件的對象。在我的應用程序中,我保留了一個prop-grid窗口對象的引用,該對象僅在用戶希望看到prop-grid時才實例化。我將prop-grid對象放置在prop-grid形式的close事件上。 – 2010-04-28 12:11:57

+0

我同意這一點._courious_geek。 +1 – 2010-04-28 12:13:28

2

在釋放模式下編譯時產生的字節碼並可能調試模式)將是相同的。

0

在此示例中,您將創建一個Form1類型的變量[myForm]併爲其分配內存。

Form1 myForm = new Form1(); 

在此示例中,第一行創建一個Form1類型的變量,但沒有爲此myForm對象分配內存。

Form1 myForm; 

然後每當需要鍵入Form1的新實例的第二行可以使用的在該點處,所述存儲器將被分配給對象myForm會]。

myForm = new Form1(); 

在我看來,它確實是一個很好的初步實踐到所有變量的申報有類型,然後當你需要一個活的情況下,你可以做你的... OBJ =新Foo1();