我正在VB中制作一个基于文本的小冒险游戏,我在游戏中有不同的功能(为了保持井井有条)。好吧,我需要两个类来互相引用。我会解释一下。
所以这两个类是Direct.vb
和Commands.vb
。我在文件中创建了引用,以便它们可以在彼此的代码中执行方法。
Direct.vb
引用Commands.vb
,如此:
Dim comm As New Commands
然后Commands.vb
以同样的方式引用Direct.vb
。
Dim dir As New Direct
但是当我运行该程序以查看它是否有效时,它会抛出StackOverflowException
。我认为这些类正在进行无限循环的引用。
我有办法解决这个问题吗?
答案 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