cast

Klassen, Objekte, Methoden, Instanzen

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

cast

Beitrag von Manfred »

Hi,

in dem Kapitel Vererbung im Handbuch, steht ganz unten etwas über Cast. Das habe ich irgendwie nicht verstanden. Kann mir jemand dazu etwas sagen?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Manfred,
ich denke mal, das ist auch beabsichtigt :D
Es gibt immer mehrere Möglichkeiten, etwas so zu schreiben, dass es möglichst nicht verstanden wird (meist gibt es dafür auch gute Gründe) - und diese Beschreibung ist ein Paradebesipiel dafür :lol:
Wenn ich ehrlich bin, verstehe ich es auch nicht.
Aber zum Thema Vererbung und Cast (im eigentlichen Sinne - ob das hier auch so gemeint ist...):
Wenn Du eine Klasse vererbst, dann hat Deine Klasse eine sogenannte Superklasse (die, von der sie selber abstammt). Wenn man nun eine Mehode überlagert (also in seiner eigenen Klasse neu/anders definiert), dann kann (und sollte man unter Umständen auch - je nach Anwendung) in seiner Methode auch die überlagerte Methode aus der Superklasse aufrufen. Dies ist dann (auch) ein cast auf die Methode der anderen Klasse.
Außerhalb der Vererbung bedeutet cast einfach Typumwandlung - also z.B.:

Code: Alles auswählen

a := 1.5
b := int( a )
Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Moin Martin,

aha.....

Typumwandlung habe ich schon mal gehört.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo Martin,

CAST = Typumwandlung, das werde ich mir merken.

Im Vererbungsbeispiel ist es der Aufruf der Superklasse.
Intern wird dieser Ausdruck wohl mit Nachrichten erledigt, daher die Aussage CAST = Senden an ein Object.

oMySLE:caption fragt die Instanzvariable caption ab.

Nun kommt es aber z.B. bei Comboboxen vor, dass 2 Superklassen existieren und jede die gleiche Methode ( hier getData() ) hat.

oMyComboBox:getdata() -> greift auf den Listboxteil zu ... wenn ich jetzt aber den Inhalt des SLE Teils will muss ich CASTen ...

oMyComboBox:XbpSle:getdata()

Bei eigenen / abgeleiteten Klassen muss man entscheiden, ob man das Standardverhalten nur leicht ändern oder komplett neu haben will.
Wobei letzteres natürlich zu Problemen führen kann...

Verhalten ändern :

MyClass:X_Method(x1,x2)
... mach was ...
::SuperClass:X_Method(x1,x2) // Standardverhalten einbauen - CAST
... noch was...
return self

oder ganz neu machen

MyClass:X_Method(x1,x2)
... mach was ...
// KEIN Aufruf ::SuperClass:X_Method(x1,x2)
... noch was...
return self
Gruß
Hubert
Antworten