AGB  ·  Datenschutz  ·  Impressum  







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

Pointer und TypeCast

Ein Thema von mumu · begonnen am 7. Mai 2005 · letzter Beitrag vom 7. Mai 2005
Antwort Antwort
mumu

Registriert seit: 28. Okt 2003
Ort: Bamberg
519 Beiträge
 
#1

Pointer und TypeCast

  Alt 7. Mai 2005, 17:01
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
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: Pointer und TypeCast

  Alt 7. Mai 2005, 17:14
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.
  Mit Zitat antworten Zitat
mumu

Registriert seit: 28. Okt 2003
Ort: Bamberg
519 Beiträge
 
#3

Re: Pointer und TypeCast

  Alt 7. Mai 2005, 17:52
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
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#4

Re: Pointer und TypeCast

  Alt 7. Mai 2005, 18:17
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.
  Mit Zitat antworten Zitat
mumu

Registriert seit: 28. Okt 2003
Ort: Bamberg
519 Beiträge
 
#5

Re: Pointer und TypeCast

  Alt 7. Mai 2005, 18:29
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?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Pointer und TypeCast

  Alt 7. Mai 2005, 18:32
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;
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Pointer und TypeCast

  Alt 7. Mai 2005, 18:33
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#8

Re: Pointer und TypeCast

  Alt 7. Mai 2005, 18:36
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.
  Mit Zitat antworten Zitat
mumu

Registriert seit: 28. Okt 2003
Ort: Bamberg
519 Beiträge
 
#9

Re: Pointer und TypeCast

  Alt 7. Mai 2005, 18:59
ach klar, 1000 mal thx, mensch da wär ich halt jetzt nie draufgekommen.
  Mit Zitat antworten Zitat
Antwort Antwort


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 22:47 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