OBS/Adminhilfe/Vererbung Objectpascal: Unterschied zwischen den Versionen
(Importing text file) |
(Importing text file) |
||
| Zeile 5: | Zeile 5: | ||
<font face="Times New Roman">'''<font size="3"><br /> virtual</font>'''</font><font face="Times New Roman"><font size="3"> und </font></font><font face="Times New Roman">'''<font size="3">dynamic</font>'''</font><font face="Times New Roman"><font size="3"> besagen, daß diese Methode in Nachfahren </font></font><font face="Times New Roman">'''<font size="3">überschreibbar</font>'''</font><font face="Times New Roman"><font size="3"> ist<br /><br /></font></font><font face="Times New Roman">'''<font size="3">override</font>'''</font><font face="Times New Roman"><font size="3"> sagt, daß diese Methode eine virtuelle/dynamische Methode eines Vorfahren </font></font><font face="Times New Roman">'''<font size="3">überschreiben</font>'''</font><font face="Times New Roman"><font size="3"> soll<br /><br /></font></font><font face="Times New Roman">'''<font size="3">abstract</font>'''</font><font face="Times New Roman"><font size="3"> besagt, daß diese virtuelle/dynamische Mathode in der "ausgangsklasse" zwar </font></font><font face="Times New Roman">'''<font size="3">deklariert, aber nicht implementiert</font>'''</font><font face="Times New Roman"><font size="3"> ist.<br /><br /></font></font><font face="Times New Roman">'''<font size="3">overload</font>'''</font><font face="Times New Roman"><font size="3"> besagt, daß es eine gleichnamige Methode gibt (natürlich mit anderen Parametern)<br /> und diese paralell/alternativ aufrufbar sind<br /><br /> mit </font></font><font face="Times New Roman">'''<font size="3">reintroduce</font>'''</font><font face="Times New Roman"><font size="3"> sagt man, daß es in den Vorfahren eine gleichnamige Methode gibt,<br /> man diese aber "absichtlich" </font></font><font face="Times New Roman">'''<font size="3">verdecken</font>'''</font><font face="Times New Roman"><font size="3"> will. (ohne reintroduce würde der Compiler eine entsprechende Warnung anzeigen<br /><br /></font></font><font face="Times New Roman">'''<font size="4">Achtung Beispiel reintroduce zu vermeiden:<br /><br /></font>'''</font><font face="Times New Roman"><font size="3">TKlasseA = class(TObject)<br /> function GetMD: TModelKlasseA; virtual; // überschreibbar machen<br /> end;<br /><br /> TKlasseB = class(TKlasseA)<br /> function GetMD: TModelKlasseB;</font></font><font face="Times New Roman">'''<font size="3"> override</font>'''</font><font face="Times New Roman"><font size="3">; // Vorgänger wird überschrieben<br /> end;<br /> ..<br /> function TKlasseA.GetMD: TModelKlasseA;<br /> begin<br /> // vorerst mal leer, kann/wird sich aber ändern. Nötig, weil abstract fehlt. <br /> // wird abstract gewünscht, dann besser die function für TKlasseA wegen Überflüssigkeit<br /> // gleich weglassen und erst in TKlasseB einführen. Ausnahme : es handelt sich um eine Komponentenklasse,<br /> // die verkauft werden soll etc.<br /> end;<br /><br /> function TKlasseB.GetMD: TModelKlasseB;<br /> begin<br /></font></font><font face="Times New Roman">'''<font size="3">inherited;</font>'''</font><font face="Times New Roman"><font size="3"> // zuerst GetMD von TKlasseA ausführen. Wird das weggelassen, dann wird TKlasseA.GetMD NICHT ausgeführt<br /> // der Krempel, den TKlasseB zusätzlich zu TKlasseA noch braucht<br /> end;<br /><br /><br /><br /></font></font>[[Category:hilfe]] | <font face="Times New Roman">'''<font size="3"><br /> virtual</font>'''</font><font face="Times New Roman"><font size="3"> und </font></font><font face="Times New Roman">'''<font size="3">dynamic</font>'''</font><font face="Times New Roman"><font size="3"> besagen, daß diese Methode in Nachfahren </font></font><font face="Times New Roman">'''<font size="3">überschreibbar</font>'''</font><font face="Times New Roman"><font size="3"> ist<br /><br /></font></font><font face="Times New Roman">'''<font size="3">override</font>'''</font><font face="Times New Roman"><font size="3"> sagt, daß diese Methode eine virtuelle/dynamische Methode eines Vorfahren </font></font><font face="Times New Roman">'''<font size="3">überschreiben</font>'''</font><font face="Times New Roman"><font size="3"> soll<br /><br /></font></font><font face="Times New Roman">'''<font size="3">abstract</font>'''</font><font face="Times New Roman"><font size="3"> besagt, daß diese virtuelle/dynamische Mathode in der "ausgangsklasse" zwar </font></font><font face="Times New Roman">'''<font size="3">deklariert, aber nicht implementiert</font>'''</font><font face="Times New Roman"><font size="3"> ist.<br /><br /></font></font><font face="Times New Roman">'''<font size="3">overload</font>'''</font><font face="Times New Roman"><font size="3"> besagt, daß es eine gleichnamige Methode gibt (natürlich mit anderen Parametern)<br /> und diese paralell/alternativ aufrufbar sind<br /><br /> mit </font></font><font face="Times New Roman">'''<font size="3">reintroduce</font>'''</font><font face="Times New Roman"><font size="3"> sagt man, daß es in den Vorfahren eine gleichnamige Methode gibt,<br /> man diese aber "absichtlich" </font></font><font face="Times New Roman">'''<font size="3">verdecken</font>'''</font><font face="Times New Roman"><font size="3"> will. (ohne reintroduce würde der Compiler eine entsprechende Warnung anzeigen<br /><br /></font></font><font face="Times New Roman">'''<font size="4">Achtung Beispiel reintroduce zu vermeiden:<br /><br /></font>'''</font><font face="Times New Roman"><font size="3">TKlasseA = class(TObject)<br /> function GetMD: TModelKlasseA; virtual; // überschreibbar machen<br /> end;<br /><br /> TKlasseB = class(TKlasseA)<br /> function GetMD: TModelKlasseB;</font></font><font face="Times New Roman">'''<font size="3"> override</font>'''</font><font face="Times New Roman"><font size="3">; // Vorgänger wird überschrieben<br /> end;<br /> ..<br /> function TKlasseA.GetMD: TModelKlasseA;<br /> begin<br /> // vorerst mal leer, kann/wird sich aber ändern. Nötig, weil abstract fehlt. <br /> // wird abstract gewünscht, dann besser die function für TKlasseA wegen Überflüssigkeit<br /> // gleich weglassen und erst in TKlasseB einführen. Ausnahme : es handelt sich um eine Komponentenklasse,<br /> // die verkauft werden soll etc.<br /> end;<br /><br /> function TKlasseB.GetMD: TModelKlasseB;<br /> begin<br /></font></font><font face="Times New Roman">'''<font size="3">inherited;</font>'''</font><font face="Times New Roman"><font size="3"> // zuerst GetMD von TKlasseA ausführen. Wird das weggelassen, dann wird TKlasseA.GetMD NICHT ausgeführt<br /> // der Krempel, den TKlasseB zusätzlich zu TKlasseA noch braucht<br /> end;<br /><br /><br /><br /></font></font>[[Category:hilfe]] | ||
---- | ---- | ||
[[Spezial:Beiträge/Auto import|Auto import]] | [[Spezial:Beiträge/Auto import|Auto import]] 17:09, 5. Jul. 2011 (CEST) | ||
Version vom 5. Juli 2011, 16:09 Uhr
virtual und dynamic besagen, daß diese Methode in Nachfahren überschreibbar ist
override sagt, daß diese Methode eine virtuelle/dynamische Methode eines Vorfahren überschreiben soll
abstract besagt, daß diese virtuelle/dynamische Mathode in der "ausgangsklasse" zwar deklariert, aber nicht implementiert ist.
overload besagt, daß es eine gleichnamige Methode gibt (natürlich mit anderen Parametern)
und diese paralell/alternativ aufrufbar sind
mit reintroduce sagt man, daß es in den Vorfahren eine gleichnamige Methode gibt,
man diese aber "absichtlich" verdecken will. (ohne reintroduce würde der Compiler eine entsprechende Warnung anzeigen
Achtung Beispiel reintroduce zu vermeiden:
TKlasseA = class(TObject)
function GetMD: TModelKlasseA; virtual; // überschreibbar machen
end;
TKlasseB = class(TKlasseA)
function GetMD: TModelKlasseB; override; // Vorgänger wird überschrieben
end;
..
function TKlasseA.GetMD: TModelKlasseA;
begin
// vorerst mal leer, kann/wird sich aber ändern. Nötig, weil abstract fehlt.
// wird abstract gewünscht, dann besser die function für TKlasseA wegen Überflüssigkeit
// gleich weglassen und erst in TKlasseB einführen. Ausnahme : es handelt sich um eine Komponentenklasse,
// die verkauft werden soll etc.
end;
function TKlasseB.GetMD: TModelKlasseB;
begin
inherited; // zuerst GetMD von TKlasseA ausführen. Wird das weggelassen, dann wird TKlasseA.GetMD NICHT ausgeführt
// der Krempel, den TKlasseB zusätzlich zu TKlasseA noch braucht
end;
Auto import 17:09, 5. Jul. 2011 (CEST)