gibt es bei C# kein delete ?
-
Hallo zusammen,
ich bins schon wieder der Umsteiger aus c++.
brauch ich Objekte, die ich mit new erzeugt habe gar nicht mehr mit delete löschen ?
Ich mache gerade meine ersten Gehversuche mit datenbanken:SqlConnection sqlConn = new SqlConnection("server=manowar;database=GUBI;Integrated Security=SSPI"); SqlCommand sqlCmd = new SqlCommand("Select distinct(WG) from WARENG_KURZ order by WG", sqlConn); sqlConn.Open(); SqlDataReader sqlReader = sqlCmd.ExecuteReader(); while(sqlReader.Read()) { rtBox.Text+=sqlReader.GetString(0) + "\r\n"; } sqlReader.Close(); sqlConn.Close();
jetzt wundert mich nur, dass ich nicht irgendwo
delete SqlConnection; delete SqlCommand;
finde
-
Kurze Antwort:
Nein, brauchst du nicht. Bei einer SqlConnection ist es allerdings möglicherweise angebracht, sie zu schließen, wenn du sie nicht mehr brauchst. Das Objekt selber löschen musst du nicht.
-
Optimizer schrieb:
Kurze Antwort:
Nein, brauchst du nicht. Bei einer SqlConnection ist es allerdings möglicherweise angebracht, sie zu schließen, wenn du sie nicht mehr brauchst. Das Objekt selber löschen musst du nicht.
Um diese Aussage noch zu verallgemeinern:
Um die Freigabe des Speichers muß man sich nicht mehr kümmern.Man muß sich aber nach wie vor selbst darum kümmern, andere Resourcen freizugeben. Da gibt es z.B. diese SqlConnection, aber auch Files. Wenn du einen File-Stream nicht gleich mit Close() zumachst, dann bleibt das darunterliegende File-Handle solange offen, bis das Objekt freigegeben wird und der Finalizer aufgerufen wird. Und das passiert irgendwann, nicht-deterministisch.
Im übrigen implementieren die meisten Objekte, die manuelles Management erfordern, die IDisposable-Schnittstelle, d.h. sie bieten dafür die Dispose()-Methode an. In C# gibt es zur Vereinfachung den using-Befehl. Schlag den doch mal in der Hilfe nach.
- Raving Tux
-
Bei C# / .NET verfügt man über GC (garbage collection), also eine eingebaute "Müllabfuhr", die nicht benötigten Speicher zu gegebener Zeit (nicht kontrollierbar, soweit ich weiß) frei gibt. Damit entfällt das aus C++ bekannte "delete".