Autor Beitrag
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 04.08.16 20:24 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 04.08.16 20:39 
Ich gehe mal von Winforms aus.
Das Parent Control eines Controls ist üblicherweise für die Zerstörung zuständig. Wenn dein UnterControl in der Controls Collection deines eigentlichen Controls liegt wird das automatisch mit zerstört und es ist nichts weiter zu tun.
Wenn dein UnterControl wo anders geparented ist (warum auch immer) solltest du UnterControl.Parent auf null setzen und UnterControl selbst disposen.
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 04.08.16 20:56 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 04.08.16 21:39 
Schwer genau zu beantworten. Irgendein IDisposable Object kann man sicher so disposen.
Im Context der Frage aber so einfach nicht zu beantworten wenn es z.B. Abhängigkeiten gibt zwischen dem Control und deinem UnterControl bzw. UnterObjekt mußt du das berücksichtigen und eventuell auf Reihenfolgen achten oder bestimmte Beziehungen berücksichtigen (Dinge nullen, Events abhängen etc.)
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 04.08.16 22:09 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 04.08.16 22:59 
Zitat:
.NET macht es einem in dem Fall wirklich nicht leicht.


Dem kann ich insofern zustimmen das richtiges Dispose Handling manchmal schwierig ist. Dispose ist aber die Notlösung die man braucht weil .Net halt auch nur über einem ungemanagten System liegt. Sobald man die .Net Welt verlässt ist man leider oft gezwungen diese Kröte zu schlucken. In der idealen Welt (in der .Net Windows übernommen hätte) wäre Dispose weitestgehend ein Ding von gestern über das man nur noch lachen würde wie doof das war das man das früher häufiger brauchte. Der Finalizer wäre dann auch gleich mit gestorben.

Zitat:
bloß nicht dort freigeben, es kann dies und jenes passieren, weil der GC launisch ist".


Ich benutze den Finalizer eigentlich nie. Das typische Dispose Muster sieht zwar vor dort nochmal als letzte Verteidigungslinie Dispose aufzurufen aber das heißt ja das man zuvor was falsch gemacht hat wenn der Call wirklich nötig wird. Und wenn er benötigt wird hat man dann das Problem das der Finalizer irgendwann aufgerufen wird. Ein Dispose soll aber ungemanagte Resourcen absichern, und deren Freigabe soll deterministisch sein. Ich will nicht das ein File Handle, Connection oder eben auch ein UI Handle das Winforms dummerweise braucht irgendwann freigegeben wird. Durch das implementieren von Finalizer kann man eigentlich meist nur mehr falsch machen als richtig. Im Zweifel "don't touch it".