Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Prüfen ob Klasse sich von spezieller Klasse ableitet (https://www.delphipraxis.net/177733-pruefen-ob-klasse-sich-von-spezieller-klasse-ableitet.html)

Blamaster 24. Nov 2013 16:26

Delphi-Version: 7

Prüfen ob Klasse sich von spezieller Klasse ableitet
 
Hi,

lässt sich prüfen ob ein Objekt einer Unterklasse angehört ?

Folgende Struktur:

Klasse A <- Klasse B <- Klasse C <- Klasse D

Ich möchte nun prüfen ob ein Objekt einer beliebigen Unterklasse von der Klasse B angehört.

Gibt es dafür eine einfache Möglichkeit ?

Sir Rufo 24. Nov 2013 16:57

AW: Prüfen ob Klasse sich von spezieller Klasse ableitet
 
Delphi-Quellcode:
if MyInstance is TMyClass then

Meflin 24. Nov 2013 17:07

AW: Prüfen ob Klasse sich von spezieller Klasse ableitet
 
Zitat:

Zitat von Sir Rufo (Beitrag 1237236)
Delphi-Quellcode:
if MyInstance is TMyClass then

Abhängig davon ob der is-Operator Subklassen matcht oder nicht (was ich nicht weiß), kannst du damit aber entweder nicht abdecken, dass es beliebige Subklassen sein sollen, oder aber den Fall nicht abdecken, dass es nicht die Root-Klasse sein soll.

himitsu 24. Nov 2013 17:15

AW: Prüfen ob Klasse sich von spezieller Klasse ableitet
 
IS Prüft auch abgeleitete Klassen.

IS = unterstüzt das Objekt die Schnittstelllen der gewünschten Klasse?
aka
IS = entspricht das Objekt diesem Typ oder ist es davon abgeleitet?




Delphi-Quellcode:
if MyObject.ClassTyp = TMyType then
oder
Delphi-Quellcode:
if MyObject.ClassNameIs('TMyType') then
prüft, ob es genau dem Typen entspricht.
Wobei Letzteres nur auf den Namen prüft, es kann aber sein, daß mehrere Typen gleich heißen.

Uwe Raabe 24. Nov 2013 17:16

AW: Prüfen ob Klasse sich von spezieller Klasse ableitet
 
Alternativ:

Delphi-Quellcode:
MyInstance.InheritsFrom(TMyClass)
Im Unterschied zu
Delphi-Quellcode:
is
kann man bei
Delphi-Quellcode:
InheritsFrom
auch eine Klassenvariable (class of) übergeben.

Also InheritsFrom(ClassB) würde bei Instanzen von ClassB, ClassC und ClassD true geben, aber z.B. bei ClassA false zurückliefern. Willst du direkt auf eine Klasse abfragen, kannst du ClassType verwenden:

Delphi-Quellcode:
type
  TClassA = class
  end;

  TClassB = class(TClassA)
  end;

  TClassC = class(TClassB)
  end;

  TClassD = class(TClassD)
  end;

var
  MyInstance: TClassA;

begin
  if MyInstance.InheritsFrom(TClassB) and (MyInstance.ClassType <> TClassB) then
    ... // ist ClassC oder ClassD oder sonst eine Klasse, die von ClassB abgeleitet wurde
end;

Blamaster 24. Nov 2013 17:17

AW: Prüfen ob Klasse sich von spezieller Klasse ableitet
 
Subklassen inklusive der Rootklasse reicht mir und das funktioniert auch :)

Super vielen Dank wusste garnicht das der is Operator Vererbung berücksichtigt.


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