Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Kann eine Klasse sealed / final sein? (https://www.delphipraxis.net/182915-kann-eine-klasse-sealed-final-sein.html)

Der schöne Günther 26. Nov 2014 12:49

Delphi-Version: XE7

Kann eine Klasse sealed / final sein?
 
Ich sehe in Delphi die Schlüsselwörter
Delphi-Quellcode:
final
und
Delphi-Quellcode:
sealed
. Letzteres wird in der IDE zwar fett markiert, ist dem Compiler und der Hilfe aber unbekannt. Wohl ein .NET-Überbleibsel.

Bleibt
Delphi-Quellcode:
final
. Das kann man anscheinend aber nur auf (virtuelle) Methoden, nicht auf die gesamte Klasse anwenden, richtig?

Union 26. Nov 2014 12:56

AW: Kann eine Klasse sealed / final sein?
 
Delphi-Referenz durchsuchensealed sollte aber bekannt sein, man kann von einer solchen Klasse nicht ableiten.

himitsu 26. Nov 2014 13:07

AW: Kann eine Klasse sealed / final sein?
 
Ich bin mir sicher, daß es in der OH seit langem genannt wird.

[edit] :stupid:
http://docwiki.embarcadero.com/RADSt...en_und_Objekte



Und wozu
Delphi-Quellcode:
final class
, wenn doch
Delphi-Quellcode:
class sealed
das Selbe macht. :angel:

Der schöne Günther 26. Nov 2014 13:18

AW: Kann eine Klasse sealed / final sein?
 
Danke. Mein Fehler. Ich hatte versucht "sealed" in der OH zu finden und gab wohl zu schnell auf.

himitsu 26. Nov 2014 14:18

AW: Kann eine Klasse sealed / final sein?
 
Ich glaub die Suche geht nur auf den Index und nicht auf die Inhalte.

Sherlock 26. Nov 2014 14:43

AW: Kann eine Klasse sealed / final sein?
 
sealed in die IDE tippen, dann reinklicken und F1 drücken führt unter XE2 zu: "5. sealed ist eine Klassendirektive mit der Syntax: 'class sealed'. Eine Klasse 'sealed' darf nicht erweitert oder abgeleitet werden (so wie final in C++). " versteckt in dem Hilfekapitel "Grundlegende syntaktische Elemente".

Sherlock

Stevie 26. Nov 2014 16:31

AW: Kann eine Klasse sealed / final sein?
 
Ne Klasse kann sealed sein, eine virtuelle Methode final. Von der Klasse kannste dann nicht mehr ableiten und die Methode nicht mehr überschreiben. Außerdem wird für eine final virtual Method beim Aufruf aus der Klasse, zu der sie gehört kein virtual method Call sondern ein statischer generiert, also ist das ein klitzekleines bisschen schneller.

Sollte man aber beides mit Bedacht einsetzen, da man dadurch weitere Vererbung ausschließt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:23 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