变量声明和赋值

时间:2016-10-11 20:22:22

标签: vb.net variable-assignment declaration

作为初学程序员,我试图理解变量声明的概念并在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运算符的作用是什么?

非常感谢任何有助于我理解的解释。

3 个答案:

答案 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