überschreiben verhindern ?
Moderator: Moderatoren
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
überschreiben verhindern ?
hi,
üblicherweise schreibt man ja eine "eigene" Method um das "original" zu "überschreiben".
wie kann ich aber nun verhindern das ich "unwissentlich" den selben Namen für "meine" Method verwende ?
der Linker gibt mir da keine "Warnung" ... oder ?
üblicherweise schreibt man ja eine "eigene" Method um das "original" zu "überschreiben".
wie kann ich aber nun verhindern das ich "unwissentlich" den selben Namen für "meine" Method verwende ?
der Linker gibt mir da keine "Warnung" ... oder ?
gruss by OHR
Jimmy
Jimmy
- Herbert
- Der Entwickler von "Deep Thought"
- Beiträge: 1991
- Registriert: Do, 14. Aug 2008 0:22
- Wohnort: Gmunden am Traunsee, Österreich
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: überschreiben verhindern ?
Deshalb kannst du PROTECTED Variablen und Methoden erstellen! So ist's egal, ob eine gleichnamige Methode in einer der Superklassen besteht.
Stefen hat irgendwann doch darüber erzählt. Sollten noch Folien darüber auffindbar sein.
Stefen hat irgendwann doch darüber erzählt. Sollten noch Folien darüber auffindbar sein.
Grüsse Herbert
Immer in Bewegung...
Immer in Bewegung...
- brandelh
- Foren-Moderator
- Beiträge: 15696
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: überschreiben verhindern ?
Hallo Herbert,
ich denke, dass dies so nicht stimmt.
Auch eine Protected Methode / iVAR der Basisklasse kann man in einer abgeleiteten durch eigene ersetzen oder erweitern
Protected schützt nur vor dem Zugriff von außen auf das Objekt.
Vermutlich meintest du aber was anderes, in der Hilfe zu CLASS steht (ab welcher Version weiß ich nicht ?)
FREEZE - Durch die Verwendung von FREEZE wird verhindert, daß eine Klasse durch eine andere Klasse mit dem gleichen Namen ersetzt wird ... Subclassing ist erlaubt.
FINAL - endgültig, kein Subclassing und kein ableiten.
Da aber normalerweise in Xbase++ subclassing genauso erlaubt ist, wie komplettes ersetzen (ob es sinnvoll ist, ist eine andere Frage !!!) helfen beide nicht bei Jimmys Absicht.
ich denke, dass dies so nicht stimmt.
Auch eine Protected Methode / iVAR der Basisklasse kann man in einer abgeleiteten durch eigene ersetzen oder erweitern
Protected schützt nur vor dem Zugriff von außen auf das Objekt.
Vermutlich meintest du aber was anderes, in der Hilfe zu CLASS steht (ab welcher Version weiß ich nicht ?)
FREEZE - Durch die Verwendung von FREEZE wird verhindert, daß eine Klasse durch eine andere Klasse mit dem gleichen Namen ersetzt wird ... Subclassing ist erlaubt.
FINAL - endgültig, kein Subclassing und kein ableiten.
Da aber normalerweise in Xbase++ subclassing genauso erlaubt ist, wie komplettes ersetzen (ob es sinnvoll ist, ist eine andere Frage !!!) helfen beide nicht bei Jimmys Absicht.
Gruß
Hubert
Hubert
-
- Rekursionen-Architekt
- Beiträge: 151
- Registriert: Do, 15. Nov 2007 11:40
- Wohnort: Krefeld
- Kontaktdaten:
Re: überschreiben verhindern ?
Hallo,
dafür gibt es auch bei Methoden ein FINAL Attribut !
Diese Methode kann auch in Subklassen nicht "überschrieben" werden. Das Attribut kann jedoch durch "Override" in der Subklasse igoriert werden.
dafür gibt es auch bei Methoden ein FINAL Attribut !
Code: Alles auswählen
CLASS Test
EXPORTED:
METHOD init()
FINAL METHOD test_final()
ENDCLASS
Kassensysteme für den Einzelhande http://ab-software.de
Mitglied der XUG-Cologne http://www.xug-cologne.de
Mitglied der XUG-Cologne http://www.xug-cologne.de
- Herbert
- Der Entwickler von "Deep Thought"
- Beiträge: 1991
- Registriert: Do, 14. Aug 2008 0:22
- Wohnort: Gmunden am Traunsee, Österreich
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: überschreiben verhindern ?
hmm. Laut Hilfe mit richtigem Ensetzen im Code, sollte es aber klappen.brandelh hat geschrieben:Hallo Herbert,
ich denke, dass dies so nicht stimmt.
Auch eine Protected Methode / iVAR der Basisklasse kann man in einer abgeleiteten durch eigene ersetzen oder erweitern
Protected schützt nur vor dem Zugriff von außen auf das Objekt.
"Die Member-Variablen und Methoden, welche nach PROTECTED: deklariert sind, sind nur innerhalb des Programmcodes für die Methoden der deklarierten Klasse und ihrer zukünftigen Subklassen sichtbar und können nur innerhalb von diesen Methoden benutzt werden. "
Ok, wenn ich bei FINAL resp. OVERRIDE lese (da dämmerts, was Steffen in Rösrath im MAi 2009 sagte), hast du recht. Es ging um diese beiden Schlüsselworte. Wer die Unterlagen noch findet, weiss dann wie's läuft.
Grüsse Herbert
Immer in Bewegung...
Immer in Bewegung...
- brandelh
- Foren-Moderator
- Beiträge: 15696
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: überschreiben verhindern ?
Genau, aber JIMMY möchte eine Fehlermeldung sehen sobald er eine vorhandene Xbp-Klassen Methode in einer Subclasse ableitet.
Dies ist nicht möglich, da bei diesen - ZUM GLÜCK - eine Ableitung ausdrücklich vorgesehen ist.
Ehrlich gesagt wäre ICH ziemlich verärgert, wenn ich für alle überladenen Methoden Warnungen bekommen würde
Dies ist nicht möglich, da bei diesen - ZUM GLÜCK - eine Ableitung ausdrücklich vorgesehen ist.
Ehrlich gesagt wäre ICH ziemlich verärgert, wenn ich für alle überladenen Methoden Warnungen bekommen würde
Gruß
Hubert
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: überschreiben verhindern ?
yup ... doppelte Function oder Procedure Name bekommt man angezeigt ... wenn die nicht STATIC sind.brandelh hat geschrieben:Genau, aber JIMMY möchte eine Fehlermeldung sehen sobald er eine vorhandene Xbp-Klassen Methode in einer Subclasse ableitet.
auch doppelte #define werden doch angemeckert ... deshalb dachte ich frage doch mal
wenn es eine "Schalter" beim linken gäbe der einen in "unbeabsichtigten" Fall warnen könnte ... dann hätte ich eher eine Idee gehabt wo ich hätte suchen müssen.brandelh hat geschrieben:Dies ist nicht möglich, da bei diesen - ZUM GLÜCK - eine Ableitung ausdrücklich vorgesehen ist.
Ehrlich gesagt wäre ICH ziemlich verärgert, wenn ich für alle überladenen Methoden Warnungen bekommen würde
ok, danke für euer Kommentare. dann werde ich bis zur "FINAL" DLL / LIB warten und dann noch mal testen wie man in einen solchen Fall darauf reagiert.
gruss by OHR
Jimmy
Jimmy
- brandelh
- Foren-Moderator
- Beiträge: 15696
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: überschreiben verhindern ?
Hi,
eigene Methoden zum Ende mit /* ...*/ auskommentieren, und kompilieren.
Wenn sie NICHT als fehlend gemeldet werden, gibt es sie schon in der Basisklasse
Oder aber einfach eigenen Methoden ein Kürzel voranstellen:
Method MyXYZ() oder AO_XYZ() ... so kann jeder sofort erkennen, das sollte eine eigene sein.
eigene Methoden zum Ende mit /* ...*/ auskommentieren, und kompilieren.
Wenn sie NICHT als fehlend gemeldet werden, gibt es sie schon in der Basisklasse
Oder aber einfach eigenen Methoden ein Kürzel voranstellen:
Method MyXYZ() oder AO_XYZ() ... so kann jeder sofort erkennen, das sollte eine eigene sein.
Gruß
Hubert
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: überschreiben verhindern ?
ja ich sollte wieder zur "volle" Schreibweise zurück kehren.brandelh hat geschrieben:Method MyXYZ() oder AO_XYZ() ... so kann jeder sofort erkennen, das sollte eine eigene sein.
ich habe nun den Stil von Pablo mit "INLINE METHOD abcd" übernommen und es in der falschen Class gehabt
... und den Fehler nicht verstanden ... und gesucht ... bis ich merkte was ich gemacht hab
gruss by OHR
Jimmy
Jimmy