/ / Visual Basic - pretečenie zásobníka z odkazov na objekt - vb.net

Visual Basic - pretečenie zásobníka z referencií objektov - vb.net

Robím trochu textovej adventúry vVB a ja máme rôzne triedy pre rôzne funkcie v hre (aby boli organizované). Potrebujem dve triedy, aby som sa mohol navzájom odkazovať. Vysvetlím to.

Takže tieto dve triedy sú Direct.vb a Commands.vb, Vytvoril som odkazy v súboroch, aby mohli vykonávať metódy vo svojom kóde.

Direct.vb referencie Commands.vb ako:

Dim comm As New Commands

A potom Commands.vb referencie Direct.vb rovnakym sposobom.

Dim dir As New Direct

Ale keď spustím program, aby som zistil, či to funguje, vyvolá to StackOverflowException, Myslím si, že tieto triedy robia nekonečné množstvo odkazov.

Existuje spôsob, ako to dokážem opraviť?

odpovede:

2 pre odpoveď č. 1

Môžete odkazovať na jednu triedu z druhej, ale nemôžete ich donútiť, aby vytvorili novú inštanciu druhej.

Vo svojom súčasnom prípade povedzte, že si ho vytvoríte Commands, tým sa vytvorí jeden Direct, tým sa vytvorí jeden Commands, tým sa vytvorí jeden Directatď., atď. Tým sa vyplní halda a zásobník, ale zásobník sa najskôr vyčerpá funkciami konštruktora.

Riešením je použiť iba referenciu, takže vynechajte New kľúčové slovo z aspoň jednej z týchto tried. Bez toho, aby sme poznali špecifiká, nie je v skutočnosti možné poskytnúť konkrétnejšie poradenstvo. Typicky by však tento druh konštrukcie fungoval:

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