Hallo Leute,
ich habe drei voneinander abgeleitete Klassen, die jeweils zwei Init-Prozeduren mit
overload besitzen. Das ganze sieht vereinfacht so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| type TSFE = class(TImage); public procedure Init(APfad: String); overload; procedure Init(AListe: TImageList; AListenIndex: Byte); overload; end; TObj = class(TSFE); public procedure Init(APfad: String; AArt: Byte); overload; procedure Init(AListe: TImageList; AListenIndex, AArt: Byte;); overload; end; TMovObj = class(TObj); public procedure Init(APfad: String; AArt, AFrame: Byte); overload; procedure Init(AListe: TImageList; AListenIndex, AArt: Byte, AFrame: Byte); overload; end; |
Über
inherited rufe ich ja in einer Methode diesselbe des Vorfahren auf. Nur weil ich jetzt da überall das overload drinne hab, hat zB TObj die Init-Prozeduren von TSFE nicht überschrieben, womit man theoretisch (und nach Compilierung) von TMovObj aus die Methode von TSFE aufrufen könnte. Das will ich nicht. In Quelltext:
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TMovObj.Init(APfad: String; AArt, AFrame: Byte); begin inherited Init(APfad, AArt); inherited Init(APfad); end; |
Meine Frage wäre also, wie man die Möglichkeit des ungewünschten Aufrufs unterbinden kann. Ich hätte eine Lösung, wenn ich einen (bzw. zwei) optimalen Parameter in die Inits einbauen könnte: hinten dran die beiden List-Parameter und APfad würde in dem Falle leer sein. Aber ich weiß nicht, wie man optionale Parameter einbaut
EDIT: Hab nach delphi-Hilfe noch
virtual in TSFE an und
reintroduce in TObj & TMovObj vor
overload gesetzt, aber es hat nichts geändert
