Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Pointer und TypeCast (https://www.delphipraxis.net/45514-pointer-und-typecast.html)

mumu 7. Mai 2005 17:01


Pointer und TypeCast
 
Ich habe einen Pointer, der entweder auf object a oder object b zeigt. wie kann ich rausfinden auf welches er zeigt und je nachdem dann weiter arbeiten...

danke

jfheins 7. Mai 2005 17:14

Re: Pointer und TypeCast
 
Erstmal: Objekte sind schon Pointer, es ist weitestgehend sinnlos, einen pointer auf einen Pointer zu machen ...

Zweitens: mit is kann man überprüfen, ob ein Objekt von einer bestimmten Klasse abstammt.

mumu 7. Mai 2005 17:52

Re: Pointer und TypeCast
 
ja gut, war ein bisschen blöd (falsch) ausgedrückt.

Delphi-Quellcode:
var ptr: Pointer;
    a: TObjectBla;
begin
 ptr = a;
und wie kann ich jetzt überprüfen, ob ptr ein TObject ist?

Delphi-Quellcode:
if ptr is TObjectBla then
...
funktioniert nicht

Robert_G 7. Mai 2005 18:17

Re: Pointer und TypeCast
 
Welchen Sinn hat der Pointer?
Könnten dort auch Zeiger auf einen Intger oder andere primitve Typen landen?
Wenn nicht ist es sinnlos und irgendwo albern einen Pointer zu nehmen. Eine Objektvariable von zum Bsp. TObject wäreeinfacher handhabbar.

mumu 7. Mai 2005 18:29

Re: Pointer und TypeCast
 
also es ist folgendes:

ich hänge an die listview.items[0].data (vom typ pointer) ein objekt. entweder objekt a oder objekt b.

falls ich später wieder auf die data eigenschaft zugreife, dann weiß man aber nicht mehr, ob objekt a oder objekt b in der data eigenschaft gespeichert wurde.

weiß jemand wie ich das dann rausfinden kann?

Bernhard Geyer 7. Mai 2005 18:32

Re: Pointer und TypeCast
 
Zitat:

Zitat von mumu
also es ist folgendes:

ich hänge an die listview.items[0].data (vom typ pointer) ein objekt. entweder objekt a oder objekt b.

falls ich später wieder auf die data eigenschaft zugreife, dann weiß man aber nicht mehr, ob objekt a oder objekt b in der data eigenschaft gespeichert wurde.

Wenn Du dir sicher bist das dort immer ein Objekt hängt, so mache erst einen harten Cast nach TObject und anschließend die sichere Abfrage nach den Klassen
Delphi-Quellcode:
var
  obj: TObject;
  myInst1: TMeineKlasse1;
begin
  obj := listview.items[0].data;
  if obj is TMeineKlasse1 then
  begin
    myInst1 := obj as TMeineKlasse1;
  ...
end;

Christian Seehase 7. Mai 2005 18:33

Re: Pointer und TypeCast
 
Moin mumu,

hat Robert doch schon geschrieben:
Wenn Du den Wert an eine Variable vom Typ TObject übergibst, kannst Du mit is den Typ prüfen.

Robert_G 7. Mai 2005 18:36

Re: Pointer und TypeCast
 
nehmen wir an, du hast das hier:
Delphi-Quellcode:
type TBaseClass = class
public
  procedure DoSomthing();virtula;abstract;
end;
Delphi-Quellcode:
type T1stClass = class(TBaseClass)
public
  procedure DoSomthing();override;
end;
Delphi-Quellcode:
type T2ndClass = class(TBaseClass)
public
  procedure DoSomthing();override;
end;
Du willst nur Instanzen von T1stClss oder T2ndClass an ein ListItem hängen.
Das würde bedeuten, dass du den Pointer sofort auf TBaseClass casten kannst. Von dort an ist es ein Klacks... ;)
Vor Allem: Wenn du Funktionen/Eigenschaften hast, die beide Objekte verwenden (hier durch DoSomething symbolisiert) würdest du dir weitere TypeCast sparen.

mumu 7. Mai 2005 18:59

Re: Pointer und TypeCast
 
ach klar, 1000 mal thx, mensch da wär ich halt jetzt nie draufgekommen.


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