我认为您的困惑可能是您将变量与对象等同起来。变量实际上不是对象,它们只是指向对象(引用)的指针。New
运算符不会创建新变量,而是创建一个新对象。您可以声明任意数量的变量而无需调用New
,因为New
运算符与变量无关。单个对象可以被任意数量的变量引用,例如:
Dim variable1 As StringBuilder ' Declare a new variable
Dim variable2 As StringBuilder ' Declare a new variable
' At this point, both variables are null (Nothing) because
' they do not reference/point to any object yet
variable1 = New StringBuilder() ' Create a new object and set variable1 to reference it
variable2 = variable1 ' Set variable2 to reference the same object as variable1
variable2.AppendLine("Hello world")
Console.WriteLine(variable1.ToString()) ' Writes "Hello World"
正如您在上面的代码中看到的那样,即使我将文本附加到变量 2,它也会影响变量 1。这是因为附加是针对/由变量指向的对象执行的,而不是由变量本身执行的。因此,由于两个变量都指向同一个对象,它们都包含相同的文本,并且会看到对该对象所做的相同更改。
因此,您无需在New
每次声明新变量时都调用。很多时候,你只需要一个变量来引用一个已经存在的对象。唯一需要使用New
操作符的时候是需要创建一个新对象的时候。因此,在您的代码中,第一行需要创建一个新的 sprite 对象,然后设置一个变量来引用它。但是,第二行不需要创建一个新对象,它只需要一个变量来引用该openweb
方法返回的对象。据推测,在该openweb
方法内部的某个地方,它在内部使用New
运算符创建一个新对象,然后返回它。
但是,我应该提一下,我所说的一切都只适用于“引用类型”(类)。“值类型”(结构)则不是这样,例如 Integer、Boolean、Date 等。我建议对引用类型和值类型之间的区别进行一些研究。