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ď č. 1Môž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 Direct
atď., 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