Einzelnen Beitrag anzeigen

Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
711 Beiträge
 
Delphi XE5 Professional
 
#1

Geerbter Getter für lokale Objekt-Konstante?

  Alt 22. Jul 2020, 22:53
Delphi-Version: XE5
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
Angehängte Dateien
Dateityp: zip Vererbungs_Test_1.zip (57,2 KB, 1x aufgerufen)
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)

Geändert von Andreas13 (22. Jul 2020 um 22:58 Uhr)
  Mit Zitat antworten Zitat