我试图理解在与对象和对象列表一起使用时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变量,它的行为就像它拥有自己的数据一样。
答案 0 :(得分:1)
TestClass
被声明为Class
。这意味着它是reference type。由于它是引用类型,这意味着该类型的所有变量都将充当指针。如果您希望它不作为指针,则需要将其声明为Structure
(值类型)。
在其他一些语言中,相同类型的值可以直接由变量存储或作为指针存储(例如,C)中的int x;
vs int *x;
。但是,在.NET语言中,该决定是由类型而不是变量全局决定的。
引用类型列表是指针列表。值列表列表存储实际值的副本。