Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Objekt as TKlasse - und nur TKlasse? (https://www.delphipraxis.net/118286-objekt-tklasse-und-nur-tklasse.html)

Panthrax 4. Aug 2008 19:38


Objekt as TKlasse - und nur TKlasse?
 
Hallo.

Ich möchte mit einem Assert sicherstellen, dass ein übergebener Parameter ein Objekt genau einer Klasse ist (und kein Nachfahre).

Wie kann geprüft werden, ob ein Objekt genau eine bestimmte Klasse hat?

Beispiel:
Delphi-Quellcode:
procedure MachWas(const Objekt: TKlasse);
begin
  Assert(Objekt is TKlasse); // TKlasse und nur TKlasse, keine Nachfahrklasse.
  // ...
end;

squetk 4. Aug 2008 19:49

Re: Objekt as TKlasse - und nur TKlasse?
 
Dies wäre eine Variante:
Delphi-Quellcode:
Assert(Objekt.ClassNameIs('TMyClass'));

Namenloser 4. Aug 2008 20:02

Re: Objekt as TKlasse - und nur TKlasse?
 
Also AFAIK prüft is genaz das. Wenn man prüfen will, ob ein Objekt ein Nachfahre einer Klasse ist, muss man einen eignen "class of"-Typ deklarieren.

Delphi-Quellcode:
TKlasse = class
end;

TKlassenClass = class of TKlasse;


// Ist Object Nachfahre einer Klasse?
assert (object is tklassenclass);

// Ist Object genau die Klasse?
assert (object is tklasse);
[edit]@Muhkuh: Stimmt :stupid: [/edit]

Die Muhkuh 4. Aug 2008 20:04

Re: Objekt as TKlasse - und nur TKlasse?
 
Du hast zwei t zuviel :P

Panthrax 4. Aug 2008 20:25

Re: Objekt as TKlasse - und nur TKlasse?
 
Zitat:

Zitat von NamenLozer
Also AFAIK prüft is genaz das. Wenn man prüfen will, ob ein Objekt ein Nachfahre einer Klasse ist, muss man einen eignen "class of"-Typ deklarieren.

Zitat:

Zitat von Delphi-Hilfe
Der Ausdruck
Objekt is Klasse
gibt True zurück, wenn Objekt eine Instanz der angegebenen Klasse oder eines ihrer Nachkommen ist.

Zitat:

Zitat von squetk
Dies wäre eine Variante:
Delphi-Quellcode:
Assert(Objekt.ClassNameIs('TMyClass'));

Danke!

mirage228 4. Aug 2008 20:36

Re: Objekt as TKlasse - und nur TKlasse?
 
Zitat:

Zitat von NamenLozer
Also AFAIK prüft is genaz das. Wenn man prüfen will, ob ein Objekt ein Nachfahre einer Klasse ist, muss man einen eignen "class of"-Typ deklarieren.

Falsch!

"IS" gibt sehr wohl bei Nachfahren auch true zurück. Du musst Delphi-Referenz durchsuchenClassType verwenden.

Delphi-Quellcode:
if (DeinObjekt.ClassType = TKlasse) then
begin
  ..
end;
mfG
mirage228

Panthrax 4. Aug 2008 22:36

Re: Objekt as TKlasse - und nur TKlasse?
 
Zitat:

Zitat von mirage228
Du musst Delphi-Referenz durchsuchenClassType verwenden.

Zitat:

Zitat von Delphi-Hilfe
ClassType sollte in Anwendungscode nicht verwendet werden.

Bei "ClassNameIs(...)" steht soetwas nicht, ich hoffe daher, dass ich es problemlos verwenden kann.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:37 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 by Thomas Breitkreuz