Einzelnen Beitrag anzeigen

ringli

Registriert seit: 7. Okt 2004
517 Beiträge
 
Delphi 11 Alexandria
 
#1

Anfängerfragen zu Generics

  Alt 6. Apr 2025, 11:14
Ich habe mit der XML-Datenanbindung eine Klasse zur Verwaltung von Programmeinstellungen erstellt.

In der eigentlichen Anwendung habe ich nun 3 ExecApps-Funktionen, die bis auf den Funktionskopf identisch sind.

Delphi-Quellcode:
interface

...

type
  TfrmMain = class(TForm)
    procedure btnPreBackupClick(Sender: TObject);
    procedure btnBackupClick(Sender: TObject);
    procedure btnPostBackupClick(Sender: TObject);
    private
      function ExecApps(AppType : IXMLPreBackupType;
                         SelectedOption : TExitMode) : Integer; overload;
      function ExecApps(AppType : IXMLBackupType;
                         SelectedOption : TExitMode) : Integer; overload;
      function ExecApps(AppType : IXMLPostBackupType;
                         SelectedOption : TExitMode) : Integer; overload;
    public
      ...
    end;
    
implementation

function TfrmMain.ExecApps(AppType : IXMLBackupType;
                           SelectedOption : TExitMode) : Integer;
begin
  if (AppType.Count = 0) then
    begin
      Exit;
    end;
    
  ...
end;

function TfrmMain.ExecApps(AppType : IXMLPreBackupType;
                           SelectedOption : TExitMode) : Integer;
begin
  if (AppType.Count = 0) then
    begin
      Exit;
    end;
    
  ...
end;

function TfrmMain.ExecApps(AppType : IXMLPostBackupType;
                           SelectedOption : TExitMode) : Integer;
begin
  if (AppType.Count = 0) then
    begin
      Exit;
    end;
    
  ...
end;

...

procedure TfrmMain.btnPreBackupClick(Sender: TObject);
begin
  if ExecApps(FXMLConfig.Types.Prebackup, SelectedOption) then
    begin
      ...
    end;
end;

procedure TfrmMain.btnBackupClick(Sender: TObject);
begin
  if ExecApps(FXMLConfig.Types.Backup, SelectedOption) then
    begin
      ...
    end;
end;

procedure TfrmMain.btnPostBackupClick(Sender: TObject);
begin
  if ExecApps(FXMLConfig.Types.Postbackup, SelectedOption) then
    begin
      ...
    end;
end;
IXMLBackupType, IXMLPreBackupType, IXMLPostBackupType sind von IXMLNodeCollection abgeleitet.

Der obige Code funktioniert soweit, ist aber natürlich 3-fach vorhanden und muss entsprechend gepflegt werden.

Jetzt dachte ich, ich könnte die 3 ExecApps-Funktionen zusammenfassen um die Pflege zu vereinfachen:
Delphi-Quellcode:
interface

...

type
  TfrmMain = class(TForm)
    procedure btnPreBackupClick(Sender: TObject);
    procedure btnBackupClick(Sender: TObject);
    procedure btnPostBackupClick(Sender: TObject);
    private
      function ExecApps<T>(AppType : T;
                            SelectedOption : TExitMode) : Integer;
    public
      ...
    end;
    
implementation

function TfrmMain.ExecApps<T>(AppType : T;
                              SelectedOption : TExitMode) : Integer;
begin
  if (AppType.Count = 0) then // E2003 Undeklarierter Bezeichner: 'Count'
    begin
      Exit;
    end;
end;

...

procedure TfrmMain.btnPreBackupClick(Sender: TObject);
begin
  if ExecApps<IXMLPreBackupType>(FXMLConfig.Types.Prebackup, SelectedOption) then
    begin
      ...
    end;
end;

procedure TfrmMain.btnBackupClick(Sender: TObject);
begin
  if ExecApps<IXMLBackupType>(FXMLConfig.Types.Backup, SelectedOption) then
    begin
      ...
    end;
end;

procedure TfrmMain.btnPostBackupClick(Sender: TObject);
begin
  if ExecApps<IXMLPostbackupType>(FXMLConfig.Types.Postbackup, SelectedOption) then
    begin
      ...
    end;
end;
Leider erhalte ich beim Zugriff auf AppType.Count in TfrmMain.ExecApps<T> den Fehler E2003 Undeklarierter Bezeichner: 'Count'.

Weiß jemand was ich falsch mache?
  Mit Zitat antworten Zitat