3.8 Mit Objekten arbeiten
 
3.8.1 Objekte vergleichen
 
Mit dem Is-Operator stellen Sie fest, ob zwei Objekte miteinander identisch sind. Genauer gesagt werden mit dem Is-Operator nicht zwei Objekte miteinander verglichen, sondern zwei Referenzen. Zeigen beide Variablen an die gleiche Stelle im Arbeitsspeicher? Das ist die Frage, die der Is-Operator überprüft. Die folgende Codesequenz verdeutlicht die Arbeitsweise.
Dim s As String
Dim a As CBackware = New CBackware()
Dim b As CBackware
a.Name = "Brot"
b = a
If a Is b Then
s = "a ist gleich b." ' Ja, a ist gleich b.
Else
s = "a ist nicht gleich b."
End If
s = b.Name ' Brot
a.Name = "Brötchen"
s = b.Name ' jetzt: Brötchen
ausgabe.innerHTML = s
Die Identität von a und b wird insbesondere durch die Anweisungen am Schluss deutlich. a.Name = "Brötchen" verändert gleichzeitig die Eigenschaft von a und von b, weil a und b auf das gleiche Objekt zeigen. Anschließend enthält auch b.Name die Bezeichnung "Brötchen".
Einen Vergleich können Sie auch mit der Methode Equals erreichen, die das Stammobjekt Object automatisch an alle Klassen vererbt:
If a.Equals(b) Then ...
3.8.2 Den Typ eines Objekts bestimmen
 
Mit dem Operator TypeOf können Sie den Typ einer Variablen bestimmen.
Dim a As CBackware = New CBackware()
If TypeOf a Is CBackware Then
s = "a ist eine Backware" ' trifft zu
Else
s = "a ist keine Backware"
End If
Auch folgender Vergleich trifft zu:
If TypeOf a Is Object Then ' trifft zu
Ein TypeOf-Vergleich trifft auf alle Klassen zu, die in der Hierarchie des fraglichen Objekts auftauchen. Wenn es eine Klasse CBrot gäbe, die von CBackware vererbt wäre, dann würde diese Abfrage ebenfalls zutreffen:
Dim a As CBrot = New CBrot()
If TypeOf a Is CBackware Then ' trifft zu, wenn CBrot
' von CBackware abstammt.
3.8.3 Objekte in andere Klassen konvertieren
 
Ein Objekt, das Instanz einer speziellen Klasse ist, können Sie stets auch als Instanz einer allgemeineren Klasse ansprechen, von der die spezielle Klasse abgeleitet ist. Die beiden folgenden Prozeduren in vb_09.aspx verdeutlichen die Vorgehensweise. Der Funktion malsehen kann ein beliebiges Objekt übergeben werden. Die Funktion malsehen überprüft, ob das übergebene Objekt vom Typ CBackware ist. In diesem Fall kann sie die Eigenschaft Name ausgeben. Sonst wird eine Information zum übergebenen Objekt mit toString ausgegeben.
Die aufrufende Prozedur Page_Load übergibt testweise mehrere Objekte. Zunächst eine Instanz von CBackware, dann eine Integer-Variable und dann eine Instanz von System.Object. Bei CBackware ruft malsehen korrekt die Eigenschaft Name ab, nachdem die Variable mit CType in ein Objekt vom Typ CBackware umgewandelt wurde.
malsehen = CType(x, CBackware).Name
Bei den beiden anderen Objekten ruft malsehen toString auf. Im Falle der Integer-Variablen führt toString dazu, dass die Zahl ausgegeben wird. Im Falle der System.Object-Variablen wird der Name der Klasse ausgegeben.
Sub Page_Load (ByVal Sender As Object, _
ByVal E As EventArgs)
Dim s As String
Dim a As CBackware = New CBackware()
a.Name = "Brötchen"
If TypeOf a Is CBackware Then
s = "a ist eine Backware"
Else
s = "a ist keine Backware"
End If
s &= "<br>" & malsehen(a) ' Brötchen
Dim i As Integer = 5
s &= "<br>" & malsehen(i) ' 5
Dim k As Object = New Object
s &= "<br>" & malsehen(k) ' System.Object
ausgabe.innerHTML = s
End Sub
Public Function malsehen (ByVal x As Object) As String
If TypeOf (x) Is CBackware Then
malsehen = CType(x, CBackware).Name
Else
malsehen = x.toString
End If
End Function
Class CBackware
Public Name As String
End Class
Das Beispiel ist für die ASP.NET-Programmierung nicht untypisch. Tatsächlich erhalten alle Ereignisprozeduren einen solchen Object-Parameter, den Sie gelegentlich erst in die speziellere Klasse zurückverwandeln müssen, bevor Sie gezielt damit arbeiten können. Auch Page_Load macht da keine Ausnahme. Der erste Parameter ByVal Sender As Object ist genau ein solches Objekt. Im Falle von Page_Load kann man aus dem Sender-Objekt nur wenig Nutzen ziehen. Interessanter wird es, wenn beispielweise eine Schaltfläche ein Click-Ereignis auslöst. Auch der Ereignisprozedur für das Click-Ereignis wird die auslösende Schaltfläche als Object-Variable übergeben, die Sie innerhalb des Codes in eine speziellere Klasse, etwa Button, zurückverwandeln können. Darüber können Sie Details über die auslösende Schaltfläche in Erfahrung bringen. Im Laufe des Buches wird dieser Fall gelegentlich demonstriert werden.
|