AGB  ·  Datenschutz  ·  Impressum  







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

Objekt as TKlasse - und nur TKlasse?

Ein Thema von Panthrax · begonnen am 4. Aug 2008 · letzter Beitrag vom 4. Aug 2008
Antwort Antwort
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#1

Objekt as TKlasse - und nur TKlasse?

  Alt 4. Aug 2008, 18:38
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;
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat
squetk

Registriert seit: 29. Aug 2004
Ort: Cottbus
118 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Objekt as TKlasse - und nur TKlasse?

  Alt 4. Aug 2008, 18:49
Dies wäre eine Variante:
Assert(Objekt.ClassNameIs('TMyClass'));
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Objekt as TKlasse - und nur TKlasse?

  Alt 4. Aug 2008, 19:02
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 [/edit]
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Objekt as TKlasse - und nur TKlasse?

  Alt 4. Aug 2008, 19:04
Du hast zwei t zuviel
  Mit Zitat antworten Zitat
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#5

Re: Objekt as TKlasse - und nur TKlasse?

  Alt 4. Aug 2008, 19:25
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 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 von squetk:
Dies wäre eine Variante:
Assert(Objekt.ClassNameIs('TMyClass'));
Danke!
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Objekt as TKlasse - und nur TKlasse?

  Alt 4. Aug 2008, 19:36
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
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#7

Re: Objekt as TKlasse - und nur TKlasse?

  Alt 4. Aug 2008, 21:36
Zitat von mirage228:
Du musst Delphi-Referenz durchsuchenClassType verwenden.
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.
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  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 19:49 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