AGB  ·  Datenschutz  ·  Impressum  







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

Was bedeutet 'final'?

Ein Thema von Cöster · begonnen am 5. Nov 2006 · letzter Beitrag vom 23. Feb 2007
Antwort Antwort
Seite 1 von 2  1 2      
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#1

Was bedeutet 'final'?

  Alt 5. Nov 2006, 13:07
Hi!

Ich bin in der Delphi-Hilfe auf das reservierte Wort 'final' gestoßen. Allerdings sagt mir die Erklärung dort nicht wirklich viel:
Zitat:
Der Delphi-Compiler unterstützt auch das Konzept einer finalen virtuellen Methode. Durch die Anwendung des Schlüsselworts final auf eine virtuelle Methode kann verhindert werden, dass diese von einer abgeleiteten Klasse überschrieben wird. Mit diesem Schlüsselwort wird gleichzeitig dokumentiert, auf welche Weise die Klasse verwendet werden soll. Außerdem ermöglicht es dem Compiler eine Optimierung des generierten Codes.
Kann jemand ein Code-Beispiel geben, in dem eine Methode als final deklariert wird, und erklären was das bewirkt?

Hab weder hier noch auf DSDT noch bei Google ne Erklärung gefunden.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Was bedeutet 'final'?

  Alt 5. Nov 2006, 13:09
Also, die Erklärung ist doch verständlich. Die mit final deklarierte Methode, kann von abgeleiteten Klassen nicht mehr überschrieben werden
Markus Kinzler
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Was bedeutet 'final'?

  Alt 5. Nov 2006, 13:14
Aber es können doch sowieso nur Methoden überschrieben werden, die virtuell oder dynamisch sind. Was ist eine "finale virtuelle Methode"? Ich sehe darin noch einen Widerspruch in sich.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Was bedeutet 'final'?

  Alt 5. Nov 2006, 13:16
das final wird auch nicht in der Basisklasse verwendet, sondern in der Deklaration in der Unterklasse, die die endgültige Implementation enthält.
Markus Kinzler
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Was bedeutet 'final'?

  Alt 5. Nov 2006, 13:20
Achso. Also in der Basisklasse wird eine Methode als virtuell oder dynamisch deklariert. In einer Unterklasse wird diese Methode überschrieben und erhält neben override noch den Zusatz final. Dadurch kann die Methode in einer Klasse, die von dieser Unterklasse abgeleitet ist, nicht nochmal überschrieben werden. Richtig?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Was bedeutet 'final'?

  Alt 5. Nov 2006, 13:28
Ja, so verstehe ich das.
Markus Kinzler
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Was bedeutet 'final'?

  Alt 5. Nov 2006, 15:27
Exakt, auf die Art kannst du verhindern, dass Konsumenten deiner Klassen invasive Änderungen vornehmen. Durch überschreiben einer Methode, die außerhalb deines Packages nicht überschrieben werden sollte.
Außerdem kann der Compiler einen Call auf eine final method wie einen statischen Call umsetzen. Das erspart dir zur Laufzeit den Dispatch um die Implementierung zu finden. Es ist also eine weitere Schraube für Optimierungen.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Was bedeutet 'final'?

  Alt 5. Nov 2006, 15:45
Auch statische Methoden können überschrieben werden, nämlich mithilfe von reintroduce.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Was bedeutet 'final'?

  Alt 5. Nov 2006, 16:01
Zitat von 3_of_8:
Auch statische Methoden können überschrieben werden, nämlich mithilfe von reintroduce.
Nein, können sie nicht. Oder dein Begriff für die Benennung "überschreiben" geht auf Tipp-Ex zurück anstatt auf Polymorphie und virtual method slots.
einfach mal ein Consolen App Project anlegen und den Code reinwerfen:
Delphi-Quellcode:
program Bleistift;

{$APPTYPE CONSOLE}

type
  ClassA = class
    function Test : String; virtual;
  end;

  ClassB = class(ClassA)
    function Test : String; reintroduce;
  end;

  ClassC = class(ClassA)
    function Test : String; override;
  end;

  ClassAClass = class of ClassA;

function ClassA.Test : String;
begin
  result := 'A';
end;

function ClassB.Test : String;
begin
  result := 'B';
end;

function ClassC.Test : String;
begin
  result := 'C';
end;

 procedure Test(classRef : ClassAClass);
var
  inst : ClassA;
begin
  inst := classRef.Create();
  Writeln(inst.Test());
  inst.Free();
end;

begin
  Test(ClassA);
  Test(ClassB);
  Test(ClassC);
end.
Es kommt natürlich A A C raus, nicht A B C.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
lowpass

Registriert seit: 19. Feb 2007
9 Beiträge
 
#10

Re: Was bedeutet 'final'?

  Alt 22. Feb 2007, 14:15
bin soeben auf das Wort "final" gestossen - komme damit aber nicht zurecht. Ich habe keinen Code hingekriegt, bei dem der Compiler final akzeptiert hätte - während in der Ober- noch in der Unterklasse.

Könnte mir jemand ein Codebeispiel geben?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 03:43 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