Seite 1 von 1

überschreiben verhindern ?

Verfasst: Mi, 15. Jun 2011 5:46
von AUGE_OHR
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 ?

Re: überschreiben verhindern ?

Verfasst: Mi, 15. Jun 2011 12:56
von Herbert
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.

Re: überschreiben verhindern ?

Verfasst: Mi, 15. Jun 2011 15:13
von brandelh
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.

Re: überschreiben verhindern ?

Verfasst: Do, 16. Jun 2011 10:53
von J.Renseler
Hallo,

dafür gibt es auch bei Methoden ein FINAL Attribut !

Code: Alles auswählen

CLASS Test

EXPORTED:
     METHOD init()
     FINAL METHOD test_final()
ENDCLASS
Diese Methode kann auch in Subklassen nicht "überschrieben" werden. Das Attribut kann jedoch durch "Override" in der Subklasse igoriert werden.

Re: überschreiben verhindern ?

Verfasst: Do, 16. Jun 2011 14:55
von Herbert
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.
hmm. Laut Hilfe mit richtigem Ensetzen im Code, sollte es aber klappen.
"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.

Re: überschreiben verhindern ?

Verfasst: Fr, 17. Jun 2011 8:52
von brandelh
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 :wink:

Re: überschreiben verhindern ?

Verfasst: Fr, 17. Jun 2011 9:17
von AUGE_OHR
brandelh hat geschrieben:Genau, aber JIMMY möchte eine Fehlermeldung sehen sobald er eine vorhandene Xbp-Klassen Methode in einer Subclasse ableitet.
yup ... doppelte Function oder Procedure Name bekommt man angezeigt ... wenn die nicht STATIC sind.
auch doppelte #define werden doch angemeckert ... deshalb dachte ich frage doch mal
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 :wink:
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.

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.

Re: überschreiben verhindern ?

Verfasst: Fr, 17. Jun 2011 9:21
von brandelh
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.

Re: überschreiben verhindern ?

Verfasst: Fr, 17. Jun 2011 9:31
von AUGE_OHR
brandelh hat geschrieben:Method MyXYZ() oder AO_XYZ() ... so kann jeder sofort erkennen, das sollte eine eigene sein.
ja ich sollte wieder zur "volle" Schreibweise zurück kehren.
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 :banghead: