C#对象声明

时间:2010-04-28 11:50:57

标签: c# .net vb.net vb6

使用以下sytax是否有任何开销:

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

相反:

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

当我学习VB6时,我被告知在VB中使用quivelent有一个开销 - 在.NET中也是如此吗?

6 个答案:

答案 0 :(得分:5)

没有。两者都是一样的。

答案 1 :(得分: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之间没有区别

答案 2 :(得分:2)

在发布模式(可能是调试模式)下编译时产生的字节码将是相同的。

答案 3 :(得分:1)

在后一种情况下,您只是从实例化中分离了声明。这没有重大影响。我在某处读到.Net对象实例化需要0.000007秒,所以它几乎不重要,尽管建议的做法是仅在需要时实例化对象并在不需要时进行处理或不需要缓存..

答案 4 :(得分:0)

我怀疑是否存在,但即使存在,性能开销也是如此微不足道,以至于选择一个而不会产生任何可以带来的好处。

答案 5 :(得分:0)

在此示例中,您将创建一个Form1类型的变量[myForm],并在创建时分配它。

Form1 myForm = new Form1(); 

在这个例子中,第一行创建一个Form1类型的变量,但是没有为这个myForm对象分配内存。

Form1 myForm;   

然后,只要你需要一个Form1类型的新实例,就可以使用第二行[此时,将为myForm对象分配内存]。

myForm = new Form1(); 

在我看来,将所有变量声明为那些类型真是一个很好的实践,然后当你需要一个实例时,你可以做你的... obj = new Foo1();