Visual Basic - 来自对象引用的堆栈溢出

时间:2016-06-08 10:42:35

标签: vb.net

我正在VB中制作一个基于文本的小冒险游戏,我在游戏中有不同的功能(为了保持井井有条)。好吧,我需要两个类来互相引用。我会解释一下。

所以这两个类是Direct.vbCommands.vb。我在文件中创建了引用,以便它们可以在彼此的代码中执行方法。

Direct.vb引用Commands.vb,如此:

Dim comm As New Commands

然后Commands.vb以同样的方式引用Direct.vb

Dim dir As New Direct

但是当我运行该程序以查看它是否有效时,它会抛出StackOverflowException。我认为这些类正在进行无限循环的引用。

我有办法解决这个问题吗?

1 个答案:

答案 0 :(得分: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