Hallo Delphi-Profis,
ich bräuchte mal wieder Eure Hilfe & Tipps. Für numerische Berechnungen mit verschiedenen mathematisch verwandten Gleichungen habe ich eine Basisklasse und abgeleitete Klassen gebildet. Jede Klasse besitzt u.a. eine lokale String-Konstante FGLTxt, die den Namen der jeweiligen Gleichung enthält und eine Integer-Konstante Fn_Var, die die Anzahl der Variablen angibt. Beide Konstanten tragen in allen Klassen den identischen Namen, haben jedoch unterschiedliche Inhalte.
Auf den GleichungsText FGLTxt und VariablenZahl Fn_Var greife ich von
außen über die Properties GL bzw. n_Var zu. Mir geht es ausschließlich um diesen „äußeren“ Zugriff.
Ich habe mehrere funktionierende Lösungen erstellt, allerdings gefällt mir nicht, daß jede abgeleitete Klasse einen eigenen Getter für beide genannte Properties haben muß, die "innen" alle identisch aussehen (= Kopie der Eltern-Klasse).
Deswegen suche ich nach einer Vereinfachung, die wie folgt aussehen sollte (wenn es geht):
Nur die Basisklasse besitzt Getter für die beiden Properties, alle abgeleiteten Klassen sollen die geerbten Getter für ihre eigenen Konstanten benutzen.
Mein Problem dabei ist, daß bei allen meinen bisherigen Lösungsversuchen immer die Properties der
Basisklasse zurückgegeben werden, nicht von der aktuellen Kind-Klasse.
Hat jemand eine Idee wie man das Problem
einfach umsetzen kann? Mit einfach meine ich: einfacher als das Hineinkopieren der Getter der Vorfahren. Eine funktionierende, aber umständliche Lösung mit Zwischenvariablen sieht so aus:
Delphi-Quellcode:
Interface
Type
TFunk_2 = Class(TObject)
Strict Private
CONST
FGLTxt: String = 'Funktion mit ZWEI Variablen';
Fn_Var: Integer = 2;
Private
VAR F_FGLTxt: String; // FGLTxt als VARIABLE
Strict Private
Function Get_n_var: Integer;
Public
Constructor Create;
Procedure Free;
Property GL : String Read F_FGLTxt;
Property n_Var: Integer Read Get_n_var;
End;
//-------------------------------------------------------------
Type
TFunk_3 = Class(TFunk_2)
Strict Private
CONST
FGLTxt: String = 'Funktion mit DREI Variablen';
Fn_Var: Integer = 3;
Strict Private
Function Get_n_var: Integer;
Public
Constructor Create;
Property n_Var: Integer Read Get_n_var;
End;
//-------------------------------------------------------------
Implementation
//-------------------------------------------------------------
{ TFunk_2 }
Constructor TFunk_2.Create;
Begin
inherited;
F_FGLTxt:= FGLTxt;
End;
Procedure TFunk_2.Free;
Begin
inherited;
End;
Function TFunk_2.Get_n_var: Integer;
Begin
Result:= Fn_Var;
End;
//-------------------------------------------------------------
{ TFunk_3 }
Function TFunk_3.Get_n_var: Integer;
Begin
Result:= Fn_Var;
End;
Constructor TFunk_3.Create;
Begin
inherited;
F_FGLTxt:= FGLTxt;
End;
Im Anhang befindet sich ein Demo-Programm dazu.
Herzlichen Dank für Eure Tipps & Ideen im Voraus!
Viele Grüße
Andreas