对对象使用 new 关键字与对象列表

Use of new keyword for objects vs. list of object

我正在尝试理解 NEW 关键字在对象与对象列表中的用法。

示例 A:

这会打印 10 次“Class value = 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 to 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打印了10次“Class value = 10”?

问题 3. 你能解释为什么会这样吗?New 关键字在处理对象与对象集合或对象列表时的含义是什么?

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

编辑:

我在下面将一个答案标记为已接受,主要是因为它包含一个 link 到一个非常有用的网页。在网页上它说以下内容帮助我了解发生了什么:

You can assign either a reference type or a value type to a variable of the Object data type. An Object variable always holds a pointer to the data, never the data itself. However, if you assign a value type to an Object variable, it behaves as if it holds its own data.

TestClass 声明为 Class。这意味着它是一个reference type。由于它是引用类型,这意味着该类型的所有变量都将充当指针。如果你想让它不充当指针,你需要将它声明为Structure(值类型)。

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

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