![]() |
destructor in delphi.net?
hi ihr,
ich darf mich jetzt in delphi.net einarbeiten und stehe schon vor einem problem: gibt's keine destructors mehr? ich habe folgenden code versucht:
Delphi-Quellcode:
an der zeile mit dem destructor gibt's allerdings die compiler-meldung "Nicht unterstütztes Sprachfeature". In der Hilfe steht nichts davon, dass es destructors unter .net nicht gibt.
type
TIceClientConnection = class private fClient: TcpClient; function GetConnected: boolean; public property Connected: boolean read GetConnected; constructor Create(Host: string; Port: integer); overload; destructor Destroy; end; deshalb nun meine frage: wie realisiere ich einen destructor? danke euch, Aenogym |
Re: destructor in delphi.net?
Gar nicht ;) Unter .net werden Objekte automatisch gekillt, wenn sie aus dem Scope rennen, inkl Unterobjekte, die dann ja noch weniger im Scope sind.
|
Re: destructor in delphi.net?
Zitat:
aenogym |
Re: destructor in delphi.net?
Es gibt finalizer, die werden ausgeführt, wenn das Object zerstört wird.
Aaaber, wenn man sie nicht braucht sollte man sich nicht die Finger daran verbrenne, da dadurch GC sweeps _wesentlich_ mehr Performance schlucken. Ich dachte Borland würde den Destructor auf Dispose ummünzen. :gruebel: Ich weiß nicht, ob du mit D.Net Finalizer anlegen kannst. |
Re: destructor in delphi.net?
[quote="Aenogym"]destructor Destroy;[/delphi]
Da fehlt wohl ein override; Zitat:
Will man den .NET Destruktor (Finalize) haben, dann muss man die Methode Finalize überschreiben. Aber wie Robert schon schrieb, zieht das an der Performance-Bremse. Deswegen hat Microsoft auch das Konzept des IDisposable Interfaces eingeführt, damit man eine deterministischen Freigabe von Ressourcen hat. Was aber unglücklich an .NET ist, ist dass man nicht nicht weiß, wann ein Objekt die IDisposable Schnittstelle unterstützt und wann nicht. Es heißt also bei nicht regelmäßig genutzen Klassen immer Code-Insight bzw. das .NET SDK konsultieren. Nutzt man bei Delphi.NET das TObject.Free, wo kümmert sich .Free darum, dass bei Objekten, die IDisposable unterstützen, diese auch aufgerufen wird und bei allen anderen Objekte nicht gemacht wird. .NET Destruktoren werden übrigens asynchron zum Code ausgeführt. Sie laufen also in einem anderen Thread. Und dass kann dann zu wunderschönen Problemen führen, wenn man das nicht weiß und die Synchronisation vergisst (sofern man externe Ressourcen nutzt). |
Re: destructor in delphi.net?
Zitat:
Bei portierten D.Net Assemblies kann ich mir gut vorstellen, dass 90% IDIspoable sind, ohne es zu brauchen. ;) Es ist auch immer hilfreich, den Reflector nebenbei auf zu haben. :) Zitat:
|
Re: destructor in delphi.net?
Mich würde auch mal interessieren, welchen Vorteil es eigentlich hat, dass die Destruktoren in .NET einen eigenen Thread haben :gruebel:
|
Re: destructor in delphi.net?
Also ich vermute mal das sich die Methode das die Objekte per Thread freigegeben werden bei größeren Objekten verhindert das die Anwendung zu lange "nicht verfügbar" ist.
Die Idee ist durchaus nicht schlecht. Ob es sich bei kleineren Objekten auszahlt ist allerdings Fraglich. |
Re: destructor in delphi.net?
Die ganze GC läuft in einem eigenen Thread, das ist ja das coole daran. Ein sweep oder die Verwaltung wird deine App nicht einfrieren lassen. :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz