Endlosscheife beim deklarieren der Variablen

  • VB.NET
  • .NET (FX) 4.0

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von RushDen.

    Endlosscheife beim deklarieren der Variablen

    Moin Moin,
    ich schreibe momentan eine Art Wartungsplaner und seit gerade bekomme ich beim Testen meines Programmes beim login immer einen "System.StackOverflowException" Fehler. Inzwischen bin ich schon so weit, das ich weiß, das ich mir irrgenwo eine endlosschleife eingebaut habe.
    Nur mein Problem ist, das der Fehler beim deklarieren meiner Varriablen auftritt. ?(

    Visual Basic-Quellcode

    1. Public Class Class1
    2. Dim con As New MysqlConnection
    3. Dim cmd As New MyqslCommand
    4. Dim reader As MysqlDataReader
    5. Dim adapter As New MysqlDataAdapter
    6. Dim class_clicker As New Class2


    Nachdem er beim Start alle Varriablen durchgeht, geht er nachdem er bei der "class_clicker" Varriabe angekommen ist in die Class2.

    Visual Basic-Quellcode

    1. Public Class Class2
    2. Dim click as New Class1


    Hier genau das gleiche, er geht die Varriablen durch und geht nach dem "click" wieder in die Class1.

    Warum geht er beim Deklarieren in die andere Class und wie kann ich den Fehler beheben ?
    Bin für jeden Tipp dankbar :thumbsup:

    LG
    Ich vermute jetzt mal einfach, dass Class1 eine Instanz von Class2 erstellt und umgekehrt. Somit wird immer wieder eine erstellt bis halt die Exception auftritt.
    Um mehr sagen zu können benötigt man aber den Code der 2 Klassen.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    er geht nicht beim Deklarieren, sondern er geht beim Instanzieren.
    Ich finde das unmittelbar logisch, und kanns daher nicht weiter erklären, dass sone Konstruktion in einem endlosen wechselseitigem Instanzieren immer neuer (New) Objekte endet.

    VB.NET-Quellcode

    1. Public Class Class1
    2. Dim class_clicker As New Class2
    3. end Class
    4. Public Class Class2
    5. Dim click as New Class1
    6. end Class

    sgtxmarc schrieb:

    das New wegnehmen ?
    Was machst Du denn mit den mit New erstellten Instanzen?
    Wenn Du eine brauchst, musst Du dem Konstruktor ne Referenz als Parameter mitgeben.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ok, danke euch :)
    Hab das problem gelöst, einfach den Aufruf des Sub´s aus den Klassen genommen und in die Form geschrieben, somit entfallen die Teile
    (

    VB.NET-Quellcode

    1. Dim class_clicker As New Class2
    und

    VB.NET-Quellcode

    1. Dim click as New Class1
    ) aus den Klassen, die die Schleife verursachen.
    Eigendlich so ein simpeles Problem :rolleyes:

    Trotzdem danke für eure Antworten ^^

    EDIT//
    Also hab ich das richtig verstanden, der Compiler erstellt mit New eine neue Instanz und schaut sich diese dann an. Das wiederholt sich dann wie in meinem Fall von Class1 zu Class2 und wieder zurück ?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „sgtxmarc“ ()

    sgtxmarc schrieb:

    Also hab ich das richtig verstanden, er schaut sich die neu erstellte Instanz an, und das macht er dann bei jedem New ?
    Sicher nicht. Ein Computer (oder was immer du mit "er" gemeint haben magst) - es hat keine Augen.
    Versuche korrekt zu formulieren, was du verstanden hast.

    vlt. findest du hier die Worte dafür: Grundlagen: Fachbegriffe
    Hier ist dein Ablauf geschildert was passiert wie du es anfangs hattest:
    -In deiner Form wird eine neue Instant von Class1 erstellt
    -Durch diesen Befehl wird in der Class1 die Zeile Dim class_clicker As New Class2 aufgerufen (Private Variablen einer Klasse werden beim instanzieren initialisiert. Dies bei dir halt mit New Class2. Siehst auch wennst es debuggst)
    -Durch diesen Befehl wird in der Class2 die Zeile Dim click as New Class1 aufgerufen
    -Durch diesen Befehl wird in der Class1 die Zeile Dim class_clicker As New Class2 aufgerufen
    -Durch diesen Befehl wird in der Class2 die Zeile Dim click as New Class1 aufgerufen
    - .....
    Und irgendwann haste eine StackOverflowException.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten

    sgtxmarc schrieb:

    der Compiler erstellt mit New eine neue Instanz
    Nicht der Compiler erstellt die Instanz sondern die RunTime.
    Der Compiler erstellt die Exe / Dll.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    sgtxmarc schrieb:

    EDIT//
    Also hab ich das richtig verstanden, der Compiler erstellt mit New eine neue Instanz und schaut sich diese dann an. Das wiederholt sich dann wie in meinem Fall von Class1 zu Class2 und wieder zurück ?


    wie gesagt: Der Compiler hat keine Augen, und schaut daher nix an. Und - ja, es ist die Runtime (wer immer das nu wieder sein mag), die schaut aber auch nix an, sondern die führt Befehle aus.
    Das mit der Endlosigkeit ist aber soweit wohl klar, odr.

    Ich mach mir keine Gedanken, wer die Befehle ausführt. Ich code ein Programm aus lauter Befehlen, und die werden halt ausgeführt - auch der New - Befehl.

    sgtxmarc schrieb:

    Sinnbildlich
    musst Du natürlich sehr wohl unterscheiden zwischen Compile-Zeit und Laufzeit. ;)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!