AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[OOP]: Typenumwandlung / Casten

Ein Thema von mytar · begonnen am 9. Sep 2004 · letzter Beitrag vom 10. Sep 2004
Antwort Antwort
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#1

[OOP]: Typenumwandlung / Casten

  Alt 9. Sep 2004, 12:46
  • Wie ist Typ() zu verstehen?
  • Was ist der Unterschied zu as?
  • Upcasten
  • Downcasten
  • Was passiert konkret bei Up- und Downcasten von Objekten?
Francis Obikwelu
greetz
mytar
  Mit Zitat antworten Zitat
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, 17: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
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: [OOP]: Typenumwandlung / Casten

  Alt 10. Sep 2004, 10:56
Danke für die Hilfe!

Letze Frage: Was ist der Unterschied zwischen Typ() und as?
Lediglich die Laufzeitprüfung?


Danke
Francis Obikwelu
greetz
mytar
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: [OOP]: Typenumwandlung / Casten

  Alt 10. Sep 2004, 11:05
Zitat von mytar:
Letze Frage: Was ist der Unterschied zwischen Typ() und as?
Lediglich die Laufzeitprüfung?
Genau
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#5

Re: [OOP]: Typenumwandlung / Casten

  Alt 10. Sep 2004, 11:31
Danke für die Hilfe!

Möchte mich ganz besonders bei:
  • Dizzy
  • Chewie
bedanken

Für mich [Erledigt]!
Francis Obikwelu
greetz
mytar
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.611 Beiträge
 
#6

Re: [OOP]: Typenumwandlung / Casten

  Alt 10. Sep 2004, 11:50
Zitat von dizzy:
Zitat von mytar:
Upcasten
...geht nicht. (imho)
Geht ja wohl

Voraussetzung ist allerdings, das das Ding vorher irgendwie (z.B. durch einen Prozeduraufruf) schon heruntergecasted wurde.

Beispiel:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
   // harter upcast
   TButton(Sender).Caption := 'clicked';

   // soft upcast
   (Sender as TButton).Caption := 'clicked';

   // ganz sicher:
   if sender is TButton then
   with sender as TButton do
   begin
      Caption := 'clicked';
   end;
end;
Hier wird ein TObject also hochgecasted, und das in den verschiedenen möglichkeiten. Sowas wird meistens dann verwendet, wenn man ein OnClick-Event für verschiedene Buttons verwendet und / oder mit dem entprechenden Control gleich was machen will (z.B. deaktivieren oder so).
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: [OOP]: Typenumwandlung / Casten

  Alt 10. Sep 2004, 20:27
Moin Zusammen,

noch ein kleiner Unterschied zwischen Typ() und as:

Bei Typ() übernimmt, sozusagen, der Entwickler die Verantwortung, dass der Typecast zur Laufzeit gültig ist, bei as kann, u.U., schon zur Compilierzeit geprüft werden, ob der Typecast gültig ist.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz