Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Ist in einem Pointer ein TObject (https://www.delphipraxis.net/54931-ist-einem-pointer-ein-tobject.html)

xaromz 13. Okt 2005 15:16


Ist in einem Pointer ein TObject
 
Hallo,

folgendes Problem: Ich hab einen Pointer. Da kann ein TObject drin sein, oder ein IInterface.
Wie kann ich herausfinden, was von den beiden ich grade vor mir habe?

Gruß
xaromz

Ultimator 13. Okt 2005 15:30

Re: Ist in einem Pointer ein TObject
 
Evtl mit
Delphi-Quellcode:
if (PtrDings^ is TObject) then
  ShowMessage('OBJEKT!')
else
if (PrtDings^ is IInterface) then
  ShowMessage('IINTERFACE!')
else
  ShowMessage('WAS ANDERES!');

sniper_w 13. Okt 2005 15:45

Re: Ist in einem Pointer ein TObject
 
Delphi-Quellcode:
if (PtrDings^ is TObject) then
  ShowMessage('OBJEKT!')
sollte
Delphi-Quellcode:
if (PtrDings is TObject) then
  ShowMessage('OBJEKT!')

Chewie 13. Okt 2005 16:09

Re: Ist in einem Pointer ein TObject
 
So funktioniert das ganze eh nicht, in beiden Fällen würde angezeigt werden, dass es sich um ein Objekt handelt. Der Grund:
Jedes Interface, das einem begegnet, ist von einem Objekt implementiert worden. Und dieses ist wiederum vom Typ TObject.
Also wenn schon, dann zuerst nach dem Interface fragen.

Oxmyx 13. Okt 2005 16:12

Re: Ist in einem Pointer ein TObject
 
Das ganze funktioniert prinzipiell nicht, wenn es sich um einen untypisierten Zeiger handelt. Denn auf einen solchen ist der is-Operator natürlich nicht anwendbar.

Ultimator 13. Okt 2005 16:14

Re: Ist in einem Pointer ein TObject
 
Ja, stimmt, sorry :oops:

Dax 13. Okt 2005 16:15

Re: Ist in einem Pointer ein TObject
 
Wie stehts denn mit
Delphi-Quellcode:
if TObject(PtrDings) is TObject then..
oder
Delphi-Quellcode:
if TObject(PtrDings) is IInterface then..
? Habs nicht getestet ;)

xaromz 13. Okt 2005 16:29

Re: Ist in einem Pointer ein TObject
 
Hallo,
Zitat:

Delphi-Quellcode:
if TObject(PtrDings) is IInterface then..

Das hatte ich auch gedacht, aber Delphi sagt "Operator auf diesen Operandentyp nicht anwendbar".

Gruß
xaromz

Ultimator 13. Okt 2005 16:40

Re: Ist in einem Pointer ein TObject
 
Delphi-Quellcode:
if TObject(PtrDings) is TObject then
 ShowMessage('Object');
Das klappt.

Das mit IInterface klappt leider nicht :?
Aber wenn wir den Pointer zu TObject casten, dass ergibt eine Prüfung auf TObject natürlich true ;)

Christian Seehase 13. Okt 2005 20:31

Re: Ist in einem Pointer ein TObject
 
Moin Zusammen,

Zitat:

Zitat von Ultimator
Delphi-Quellcode:
if TObject(PtrDings) is TObject then
 ShowMessage('Object');
Das klappt.

Das mit IInterface klappt leider nicht :?
Aber wenn wir den Pointer zu TObject casten, dass ergibt eine Prüfung auf TObject natürlich true ;)

oder, um es etwas deutlicher zu machen:

Durch TObject(PtrDings) sagt man dem Compiler, dass man sich sicher ist, dass PtrDings vom Typ TObject ist, bzw. dass der Compiler hier nicht den Typ prüfen muss. Ob diese Art Typecast dann auch stimmt liegt in der Verantwortung dessen der es schreibt.


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