对对象使用 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 语言中,该决定是由类型而不是变量全局决定的。
引用类型列表是指针列表。值类型列表存储实际值的副本。
我正在尝试理解 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 语言中,该决定是由类型而不是变量全局决定的。
引用类型列表是指针列表。值类型列表存储实际值的副本。