AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

destructor in delphi.net?

Ein Thema von Aenogym · begonnen am 22. Aug 2005 · letzter Beitrag vom 22. Aug 2005
Antwort Antwort
Benutzerbild von Aenogym
Aenogym

Registriert seit: 7. Mär 2004
Ort: Schwerin
1.089 Beiträge
 
Delphi 7 Enterprise
 
#1

destructor in delphi.net?

  Alt 22. Aug 2005, 19:56
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:
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;
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.

deshalb nun meine frage: wie realisiere ich einen destructor?

danke euch,
Aenogym
Steffen Rieke
Was nicht buzzt, wird buzzend gemacht!
http://blog.base-records.de
http://www.base-records.de
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: destructor in delphi.net?

  Alt 22. Aug 2005, 19:59
Gar nicht Unter .net werden Objekte automatisch gekillt, wenn sie aus dem Scope rennen, inkl Unterobjekte, die dann ja noch weniger im Scope sind.
  Mit Zitat antworten Zitat
Benutzerbild von Aenogym
Aenogym

Registriert seit: 7. Mär 2004
Ort: Schwerin
1.089 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: destructor in delphi.net?

  Alt 22. Aug 2005, 20:08
Zitat von Dax:
Gar nicht Unter .net werden Objekte automatisch gekillt, wenn sie aus dem Scope rennen, inkl Unterobjekte, die dann ja noch weniger im Scope sind.
danke dir. jetzt, wo du es sagst, fällt mir ein, dass ich das vor kurzem bei visual c# express gelesen hab

aenogym
Steffen Rieke
Was nicht buzzt, wird buzzend gemacht!
http://blog.base-records.de
http://www.base-records.de
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#4

Re: destructor in delphi.net?

  Alt 22. Aug 2005, 20:13
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.
Ich weiß nicht, ob du mit D.Net Finalizer anlegen kannst.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

Re: destructor in delphi.net?

  Alt 22. Aug 2005, 20:25
[quote="Aenogym"]destructor Destroy;[/delphi]
Da fehlt wohl ein override;

Zitat:
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.
Unter Delphi.NET wird das Schlüsselwort destructor auf die Methode Dispose umgemünzt und das Interface IDisposable der Klasse hinzugefügt.
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).
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#6

Re: destructor in delphi.net?

  Alt 22. Aug 2005, 20:43
Zitat:
Was aber unglücklich an .NET ist, ist dass man nicht nicht weiß, wann ein Objekt die IDisposable Schnittstelle unterstützt und wann nicht.
Ich verwende Doku tags auf Dispose bzw. Versuche es gar nicht soweit kommen zu lassen...
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:
.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).
Das ist ja die krasse Bremse, dass sich die GC eiinen Wolf locken muss.
  Mit Zitat antworten Zitat
Benutzerbild von malo
malo

Registriert seit: 19. Sep 2004
2.115 Beiträge
 
#7

Re: destructor in delphi.net?

  Alt 22. Aug 2005, 20:51
Mich würde auch mal interessieren, welchen Vorteil es eigentlich hat, dass die Destruktoren in .NET einen eigenen Thread haben
  Mit Zitat antworten Zitat
Benutzerbild von Speedmaster
Speedmaster

Registriert seit: 4. Mär 2005
Ort: Karlsruhe
535 Beiträge
 
Delphi 2005 Personal
 
#8

Re: destructor in delphi.net?

  Alt 22. Aug 2005, 20:54
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.
Felix K.
Zitat:
Siehst du diesen Park da unten?
Jeden Tag lernen sich leute kennen und verlassen einander, und du hast dein ganzes Leben Zeit darin zu gehen!
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#9

Re: destructor in delphi.net?

  Alt 22. Aug 2005, 21:02
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz