Referenz - IS (Vererbung)
Syntax: Variable IS Klasse
Typ: Operator
Kategorie: Klassen
IS wird in Verbindung mit Vererbung dazu genutzt, um den Typen einer Variable zu prüfen. Der Operator kann nur genutzt werden, wenn die Basis-Klasse von OBJECT erbt und somit die RTTI-Funktionalität zur Verfügung steht.
Der Operator prüft nicht, ob die Variable exakt zur gefragten Klasse gehört. Er liefert vielmehr auch dann ein wahres Ergebnis, wenn die Variablen-Klasse von der angegebenen Klasse erbt. Das bedeutet, dass eine Variable einer Kind-Klasse auch in die Basis-Klasse fällt. Ein Beispiel dazu finden Sie im Artikel zu OBJECT. Wenn Sie die exakte Zugehörigkeit zu einer Klasse prüfen wollen, sollten Sie aus diesem Grund die abgefragten Klassen immer in zur Erbreihenfolge entgegengesetzen Reihenfolge prüfen.
Beispiel 1:
Type Haustier Extends Object
As Integer beine = 4
As Integer schwanz = 1
End Type
Type Hund Extends Haustier
Declare Sub gibLaut
End Type
Sub Hund.gibLaut
Print "Wuff!"
End Sub
Type Chihuahua Extends Hund
Declare Sub gibLaut
End Type
Sub Chihuahua.gibLaut
Print "Klaeffklaeff!"
End Sub
Dim As Haustier ptr balto = New Hund
If *balto Is Chihuahua Then
Print "Balto ist sehr klein."
ElseIf *balto Is Hund Then
Print "Balto ist ein normaler Hund."
Else
Print "Balto ist ein Haustier."
End If
Delete balto
Sleep
IS arbeitet nur mit der Klasse, die direkt von OBJECT erbt. Andererseits kann diese Klasse natürlich nicht auf die Attribute und Methoden seiner Kindklassen zugreifen; balto.gibLaut ist in oben stehenden Beispiel nicht möglich. Als Lösung kann die Variable entsprechend geCASTet werden. Damit ist es z. B. auch möglich, an eine Prozedur eine Variable zu übergeben, die je nach zugehöriger Klasse anders behandelt wird.
Beispiel 2:
' ### Klassendeklarationen ###
Type Haustier Extends Object
As Integer beine = 4
As Integer schwanz = 1
End Type
Type Hund Extends Haustier
As Integer anhaenglich = 1
Declare Sub gibLaut ()
End Type
Sub Hund.gibLaut ()
Print "Wuff!"
End Sub
Type Katze Extends Haustier
As Integer verspielt = 1
Declare Sub gibLaut ()
End Type
Sub Katze.gibLaut ()
Print "Miau!"
End Sub
' ### Prozedur zur Behandlung aller Haustier-Klassen ###
Sub haustiertest(tier As Haustier)
If tier Is Hund Then
Print "Dieser Hund hat einen Anhaenglichkeitswert von " & Cast(Hund ptr, @tier)->anhaenglich & "."
Cast(Hund ptr, @tier)->gibLaut
Elseif tier Is Katze Then
' dasselbe mit temporaerer Variable
Dim As Katze ptr k = Cast(Katze ptr, @tier)
Print "Diese Katze hat einen Verspieltheitswert von " & k->verspielt & "."
k->gibLaut
Else
Print "Ueber dieses Tier weiss ich nichts."
End If
End Sub
' ### Testaufrufe ###
Dim mautzi As Katze, balu As Hund
haustiertest(balu)
Print
haustiertest(mautzi)
Sleep
Unterschiede zu QB: neu in FreeBASIC
Unterschiede zu früheren Versionen von FreeBASIC:
IS in Verbindung mit Vererbung existiert seit FreeBASIC v0.24
Siehe auch:
TYPE (UDT), BASE, OBJECT, EXTENDS, Objektorientierung
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|