Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi abgeleitete Objekte wie Parent-Objekte verwenden (https://www.delphipraxis.net/92741-abgeleitete-objekte-wie-parent-objekte-verwenden.html)

messie 25. Mai 2007 09:07


abgeleitete Objekte wie Parent-Objekte verwenden
 
Moin,

war nicht leicht eine sinnvolle Beschreibung des Problem zu finden.

Ich habe eine Objectklasse aus der ich eine weitere abgeleitet und mit zusätzlichen Variablen versehen habe:
Delphi-Quellcode:
  TObj_1 = class(TObject)
  TObj_2 = class(TObj_1)
Jetzt habe ich eine Routine, die ein TObj_1 erwartet, z.B.
Delphi-Quellcode:
  procedure MachWasRichtig(input : TObj_1);
Dieser Routine möchte ich ein TObj_2 übergeben, weil ich die zusätzlichen Informationen dort nicht benötige.
Ist das korrekt, dann
Delphi-Quellcode:
  MachWasRichtiges(TObj_1(Obj_2));
zu verwenden? Es funktioniert zwar, aber ich bin mir nicht ganz sicher ob das auch richtig ist.

Grüße, Messie

SirThornberry 25. Mai 2007 09:10

Re: abgeleitete Objekte wie Parent-Objekte verwenden
 
der cast ist unnötig. Anstelle von
Delphi-Quellcode:
MachWasRichtiges(TObj_1(Obj_2));
kannst du auch einfach nur
Delphi-Quellcode:
MachWasRichtiges(Obj_2);
schreiben. Denn Obj2 ist ja von TObj1 abgeleitet.

messie 25. Mai 2007 09:20

Re: abgeleitete Objekte wie Parent-Objekte verwenden
 
Ja aber Obj_2 hat ja eine größere Speichermaske. Wird die ohne Cast korrekt zugeschnitten?

Grüße,Messie

Elvis 25. Mai 2007 09:32

Re: abgeleitete Objekte wie Parent-Objekte verwenden
 
Zitat:

Zitat von messie
Ja aber Obj_2 hat ja eine größere Speichermaske. Wird die ohne Cast korrekt zugeschnitten?

Delphi hat keine Mehrfachvererbung, und dadurch werden solche Dinge zu einem no-brainer. ;)

TObject1 hat meinetwegen 2 Felder, eins an offset 8 und eins an 12. Insgesamt ist eine Instanz davon vllt 16 bytes groß.
TObject2 erbt von Tobject1 und damit auch genau diese Struktur, alles weitere was hinzugefügt wird, landet hinten dran.

Wenn ich also das erste Feld von TObject1 auslesen will kann ich einfach 4 Bytes von (self^ + 8 ) auslesen.
Dabei ist es also egal ob die Instanz dahinter TObject1 oder TObject2 ist.


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