我試圖簡化和註釋下面給我頭痛的代碼。它證明了我的問題。簡而言之,我有兩個單獨的堆棧,我試圖從一個堆棧彈出。出於某種原因,當你彈出其中一個堆棧時,它似乎也彈出另一個堆棧?!這是否是設計的,如果是這樣,爲什麼以及如何解決它?爲什麼從一個堆棧彈出實際上是從多個單獨的堆棧彈出的?
...還是我只是在盡一個布偶? (不要回答那個)
Public Class Form1
Public _stackMaster As New Stack
Public _stackCopy As New Stack
Public _strPopped As String
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
_stackMaster.Push("line1")
_stackMaster.Push("line2")
_stackMaster.Push("line3")
MsgBox("Before copying the Master stack to the Copy stack." & vbCrLf & "_stackMaster.Count=" & _stackMaster.Count & vbCrLf & "_stackCopy.Count=" & _stackCopy.Count)
_stackCopy = _stackMaster
MsgBox("After copying the Master stack to the Copy stack." & vbCrLf & "_stackMaster.Count=" & _stackMaster.Count & vbCrLf & "_stackCopy.Count=" & _stackCopy.Count)
_strPopped = _stackCopy.Pop
MsgBox("After popping a string from the Copy stack." & vbCrLf & "_stackMaster.Count=" & _stackMaster.Count & vbCrLf & "_stackCopy.Count=" & _stackCopy.Count & vbCrLf & "Why do both counts decrease?? Aren't they separate stacks?")
End
End Sub
End Class
這絕對是正確的。但是,沒有任何人知道爲什麼嗎?如果我有兩個整數和我使用類似的賦值語句,它複製值,而不是參考。是在vb中聲明一個棧基本上只是聲明一個指針? – Chris 2009-08-19 12:50:51
.NET有兩種對象類型:引用類型和值類型。值類型在堆棧上分配(並從基類ValueType派生),而引用類型在堆上分配(並從基類對象派生),並在堆棧上分配一個引用(基本上是一個託管指針)。基元(Int32,Single,Double等)是值類型,因此直接分配。 'Stack'是一個引用類型,因此'Stack'變量都只是引用。 – 2009-08-19 17:27:30