Einzelnen Beitrag anzeigen

Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: [OOP]: Typenumwandlung / Casten

  Alt 9. Sep 2004, 18:47
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?
Aus der OH:

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
  Mit Zitat antworten Zitat