对对象和对象列表使用新关键字

时间:2015-03-26 18:48:24

标签: vb.net list collections

我试图理解在与对象和对象列表一起使用时NEW关键字的使用。

示例A:

这会打印出“Class value = 10”10次。

Public Class TestClass
    Private _testInt As Integer
    Property TestInt As Integer
        Get
            Return _testInt
        End Get
        Set(value As Integer)
            _testInt = value
        End Set
    End Property
End Class

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim test As New List(Of TestClass)
        Dim localTest = New TestClass
        For i As Integer = 0 To 10
            localTest.TestInt = i
            test.Add(localTest)
        Next
        For i As Integer = 0 To 10
            Console.WriteLine("Class value = " & test(i).TestInt.ToString)
        Next
    End Sub

示例B:

如果我将localTest的声明移到循环内,它将打印出“Class value = 1到10”。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim test As New List(Of TestClass)
    For i As Integer = 0 To 10
        Dim localTest = New TestClass
        localTest.TestInt = i
        test.Add(localTest)
    Next
    For i As Integer = 0 To 10
        Console.WriteLine("Class value = " & test(i).TestInt.ToString)
    Next
End Sub

在我看来,localTest就像一个对象的实例,而test就像一个指向对象的指针列表。

Q1。 localTest是对象的实例还是指向对象的指针?

Q2。 test多个对象实例或指向对象的指针列表?如果它是指针列表,为什么示例A打印出“Class value = 10”10次?

Q3。你能解释为什么行为是这样的,以及New关键字在处理对象与集合或对象列表时的含义是什么?

任何额外的见解都会很棒。谢谢。

修改

我已经在下面标记了一个答案,主要是因为它包含指向真正有用的网页的链接。在网页上,它说明了以下内容,这有助于我了解发生了什么:

  

您可以为变量指定引用类型或值类型   对象数据类型。 Object变量始终包含指向的指针   数据,而不是数据本身。但是,如果指定值类型   对于一个Object变量,它的行为就像它拥有自己的数据一样。

1 个答案:

答案 0 :(得分:1)

TestClass被声明为Class。这意味着它是reference type。由于它是引用类型,这意味着该类型的所有变量都将充当指针。如果您希望它不作为指针,则需要将其声明为Structure(值类型)。

在其他一些语言中,相同类型的值可以直接由变量存储或作为指针存储(例如,C)中的int x; vs int *x;。但是,在.NET语言中,该决定是由类型而不是变量全局决定的。

引用类型列表是指针列表。值列表列表存储实际值的副本。