作为初学程序员,我试图理解变量声明的概念并在Visual Basic中赋值。我正在考虑教程课程中的这段代码:
Imports System.Text
Module Module1
Sub Main()
Dim myString As StringBuilder = New StringBuilder
For i = 1 To 10
myString.Append("-")
myString.Append(i)
Next
Console.WriteLine(myString)
Console.ReadLine()
End Sub
End Module
我的困惑是由于这一行:
Dim myString As StringBuilder = New StringBuilder
我认为发生的事情是我将变量myString声明为StringBuilder类的新对象实例(我希望我在这里正确地使用'object'和' class')。但是,为什么myString随后需要分配给New StringBuilder?我没有用Dim把它变成一个StringBuilder吗?在这个例子中,New运算符的作用是什么?
非常感谢任何有助于我理解的解释。
答案 0 :(得分:1)
该行
Dim myString as StringBuilder
声明一个用于引用StringBuilder实例的变量。在调用New之前,该实例不存在。 New在内存中的某处创建实例,并返回对实例所在的内存区域的引用。
让我们试着检查这条线 当你写
Dim myString as StringBuilder = New StringBuilder
(你也可以使用 Dim myString = new StringBuilder(),编译器可以从上下文中识别变量的类型)
你将两条指令放在一行
Dim myString As StringBuilder
myString = New StringBuilder
在第一行中,声明一个要引用StringBuilder实例的变量,但此时,变量(将其视为内存中4个字节的区域)不包含任何内容。变量的值尚未分配给任何内容,您可以使用
进行证明Dim myString As StringBuilder
Dim b As Boolean = False
b = myString Is Nothing
Console.WriteLine(b) ' => outputs True
现在,您调用 New StringBuilder 运算符,该运算符搜索内存区域,其中有足够的空间来存储属于StringBuilder实例的所有内部字段,在创建此区域后, operator调用StringBuilder类的无参数构造函数(应该将内部字段初始化为所需的内容)并返回指向为StringBuilder实例分配的内存区域的值。这个值(对......的引用)将被分配给你的myString变量,现在已经不再是Nothing
myString = New StringBuilder()
b = myString Is Nothing
Console.WriteLine(b) ' => outputs False
答案 1 :(得分:0)
发生了什么,你做了一个快捷方式:
Dim myString As StringBuilder
myString = new StringBuilder()
因此,您不需要分配新的StringBuilder,因为您已经完成了分配。
现在,Console.WriteLine应该是myString.ToString()
,就像
Console.WriteLine (myString.ToString())
这会将StringBuilder对象转换为字符串。
答案 2 :(得分:0)
字符串构建器是一个类。
执行Dim myString as StringBuilder
时,您正在创建一个变量,即一个内存空间,它将指向实例StringBuilder
的内存中的位置。
每当你Dim
某事时,它的值就是该类的默认值。对于大多数类,默认值为null,尽管ValueTypes(如Integer和Boolean)具有其他默认值(0表示Integer,false表示布尔值)
执行= New StringBuilder
时,您正在实例化StringBuilder类的对象,现在您的变量myString指向内存中的那个位置。
如果省略此步骤,myString.Append("-")
将抛出NullPointerException,因为myString为null。
Dim myString As StringBuilder = New StringBuilder
是一种简单的方法:
Dim myString As StringBuilder
myString = New StringBuilder