Hi,
ich habe ein Problem das ich absolut nicht nachvollziehen kann. Ich rufe mit folgendem Befehl eine Funktion auf und gebe dieser das lokale Objekt mit (hier == null):
C#-Quelltext
1: 2:
| MySqlConnection connection = null; if (Verbindung(connection)) |
Die Funktion sieht wie folgt aus (eher uninteressant, aber hier wird das Objekt deklariert)
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| private Boolean Verbindung(MySqlConnection connection) { if (connection == null) { if (_datenbank != null) { connection = new MySqlConnection("SERVER=" + _datenbank.Server + ";" + "PORT=" + _datenbank.Port + ";" + "DATABASE=" + _datenbank.Name + ";" + "UID=" + _datenbank.Benutzername + ";" + "PASSWORD=" + _datenbank.Password + ";"); try { if(connection == null) { MessageBox.Show("Connection ist bei Erstellung null"); } connection.Open(); return true; } catch (Exception e) { MessageBox.Show(e.StackTrace); return false; } } else { MessageBox.Show("Datenbank ist null"); return false; } } return false; } |
Wenn ich beim Quellcode dieses erstellte connect aufrufen will bekomme ich eine Null Exception, aber nicht die bei der Erstellung sondern nachdem das Objekt aufgerufen wurde - theoretisch würde ich erwarten das C# die Adresse überträgt, das Objekt erstellt und diesem Objekt zuweist - sodass ich es auch, so lange es gültig ist, wieder verwenden. Oder habe ich da einen Denkfehler? Im Prinzip müsste ich das ganze nun so machen das ich die erstellte, übergebene Variable zurückgebe. Soweit kein Problem (muss man nur den Quellcode etwas umschreiben

). Aber wie gesagt, von meinem Verständniss aus dürfte der Garbage Collector diese noch nicht entfernen da ich sie in einer anderen, noch laufenden Funktion, verwende...