C#对象声明

Pau*_*els 5 .net c# vb.net vb6

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

Form1 myForm = new Form1();
myForm.Show();
Run Code Online (Sandbox Code Playgroud)

相反:

Form1 myForm;
myForm = new Form1();
myForm.Show();
Run Code Online (Sandbox Code Playgroud)

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

Ism*_*ilS 5

不,两者都是一样的.


Mar*_*rkJ 5

.Net没有区别.

但在VB6中As New是邪恶的.它有一个特殊的含义:它创建了一个自动实例化变量.你永远不会得到这些变量的空引用异常.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 '
Run Code Online (Sandbox Code Playgroud)

大多数有思想的程序员认为这种行为是邪恶的:我们避免As New像瘟疫一样.

但在VB.Net(和C#)中,Dim x As New Foo和之间没有区别Dim x As Foo: Set x = New Foo