In Delphi gibt es die Methode InheritsFrom() die True zurückgibt, wenn das überprüfte Objekt von der angegebenen Klasse abgeleitet ist
in C# gibt es meines Wissens nur den "is" Operator oder????
object aComponent;
...
if (aComponent is TextBox) ...
else if (aComponent is Label) ...
else if (aComponent is Button) ...
else ...
Nachteilig bei dieser is-Abfragerei ist, dass man viel mehr Abfragen braucht als mit InheritsFrom da man sich mit InheritsFrom immer den grössten gemeinsamen Nenner der Komponenten suchen kann...
[DELPHI]
var aComponent:TObject;
if aComponent.InheritsForm(TComponent) then ...
else ...
[/DELPHI]
Bernhard
So wie ich das sehe, funktionieren is und InheritsFrom gleich. Es wird geprüft, ob die Klasse von aComponent in einer Vererbungsbeziehung zur angegebenen Klasse steht. D.h. sie ist entweder die Klasse selbst oder leitet direkt oder indirekt von ihr ab.
object aComponent;
if (aComponent is Control) {
} else {
}
hab's gerade ausprobiert
is
steht bei C# auch für InheritsFrom()
Danke
Bernhard
Hallo HartlBe,
du solltest überlegen, ob du eine Typabfrage wirklich brauchst. Normalerweise benutzt man ja gerade virtuelle Methoden, um auf den jeweiligen Typ passend reagieren zu können.
Natürlich gibt es Gründe den Typ eines Objekts zur Laufzeit zu ermitteln, aber alleine die Tatsache, dass das - zumindest in der ursprünglichen - C++-Sprachdefinition so eine Möglichkeit nicht gibt, zeigt, dass es normalerweise auch ohne geht.
HTH
herbivore