![]() |
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 |
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. |
Re: Pointer und TypeCast
ja gut, war ein bisschen blöd (falsch) ausgedrückt.
Delphi-Quellcode:
und wie kann ich jetzt überprüfen, ob ptr ein TObject ist?
var ptr: Pointer;
a: TObjectBla; begin ptr = a;
Delphi-Quellcode:
funktioniert nicht
if ptr is TObjectBla then
... |
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. |
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? |
Re: Pointer und TypeCast
Zitat:
Delphi-Quellcode:
var
obj: TObject; myInst1: TMeineKlasse1; begin obj := listview.items[0].data; if obj is TMeineKlasse1 then begin myInst1 := obj as TMeineKlasse1; ... end; |
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. |
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:
Du willst nur Instanzen von T1stClss oder T2ndClass an ein ListItem hängen.
type T2ndClass = class(TBaseClass)
public procedure DoSomthing();override; end; 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. |
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