2016-06-08 75 views
-1

我在VB中做了一個基於文本的小冒險遊戲,並且我爲遊戲中的不同功能(保持有組織)提供了不同的類。那麼,我需要兩個類來相互引用。我會解釋。Visual Basic - 對象引用的堆棧溢出

所以這兩個類別是Direct.vbCommands.vb。我在文件中創建了引用,以便它們可以在彼此的代碼中執行方法。

Direct.vb引用Commands.vb像這樣:

Dim comm As New Commands 

然後Commands.vb引用Direct.vb以同樣的方式。

Dim dir As New Direct 

但是當我運行該程序,看看它的工作原理,它拋出一個StackOverflowException。我認爲這些類正在做一個無限循環的引用。

有沒有辦法解決這個問題?

+0

看來你對你的類有一種誤解。實際上這兩個類都不可能包含彼此的新對象,因爲每個對象都會包含另一個對象,因此您將擁有無限量的對象。 – Mono

回答

2

您可以從另一個類引用一個類,但不能讓它們都創建另一個類的新實例。

在當前的情況下,說你創建一個Commands,這將創建一個Direct,這將創建一個Commands,這將創建一個Direct,等等等等 這將填補堆和棧中,但堆棧耗盡首先是構造函數。

解決方法是僅使用參考,因此請至少從其中一個類中省略New關鍵字。不知道具體情況,不可能提供更具體的建議。通常情況下,這種結構可以工作:

Public Class Commands 
    Private dir As Direct 

    Public Sub New() 
     dir = New Direct(Me) 
    End Sub 
End Class 

Public Class Direct 
    Private cmd As Commands 

    Public Sub New(ByVal cmdInstance As Commands) 
     cmd = cmdInstance 
    End Sub 
End Class