Zitat von
mytar:
Wie ist Typ() zu verstehen?
Das ist ein direkter Cast des in den Klammern stehenden Objektes in den Typ den du vor den Klammern angibst.
Zitat von
mytar:
Was ist der Unterschied zu as?
Der Operator as führt eine Typumwandlung mit Laufzeitprüfung durch. Der Ausdruck
Objekt as Klasse
gibt eine Referenz auf dasselbe Objekt wie Objekt, aber mit dem von Klasse angegebenen Typ zurück. Zur Laufzeit muss Objekt eine Instanz von Klasse oder einem ihrer Nachkommen bzw. nil sein. Andernfalls wird eine
Exception ausgelöst.
Dass heisst, dass du mit
as sicherstellen kannst, dass nur gültige Downcasts (s.u.) durchgeführt werden, und sonst eine
Exception ausgelöst wird.
Zitat von
mytar:
Upcasten
...geht nicht. (
imho)
Zitat von
mytar:
Downcasten
Ist, wenn du ein Objekt einer Klasse in ein Objekt eines Klassenvorgängers castest.
Bsp:
Delphi-Quellcode:
type
TClass1 = class
public
Wert: Integer;
end;
TClass2 = class(TClass2)
public
Buchstabe: Char;
end;
.
.
var
C1: TClass1;
C2: TClass2;
.
.
// Dies ist ein gültiger Downcast
C1 := C2 as TClass1;
// Das hier ein nicht möglicher Upcast
C2 := C1 as TClass2;
Zitat von
mytar:
Was passiert konkret bei Up- und Downcasten von Objekten?
Nach dem Downcasten hast du nur noch Zugriff auf die Felder des Objektes, die schon in der Zielklasse deklariert sind. Im obigen Beispiel hättest du nach dem Downcast keinen Zugriff mehr auf C2.Buchstabe, da das Objekt C2 jetzt mit C1 referenziert wird, welches aber vom Typ TClass1 ist, und "Buchstabe" nicht kennt.
Ich hoffe das war soweit alles richtig - müsste aber
gruss,
dizzy
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel