![]() |
Anfängerfragen zu Generics
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:
IXMLBackupType, IXMLPreBackupType, IXMLPostBackupType sind von IXMLNodeCollection abgeleitet.
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; 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:
Leider erhalte ich beim Zugriff auf AppType.Count in TfrmMain.ExecApps<T> den Fehler E2003 Undeklarierter Bezeichner: 'Count'.
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; Weiß jemand was ich falsch mache? |
AW: Anfängerfragen zu Generics
Probiere Mal in der Deklaration:
Delphi-Quellcode:
sonst könnte "T" ja auch ein Integer oder sonstwas sein, das keine Eigenschaft "Count" hat.
private
function ExecApps<T: IXMLNodeCollection>(AppType : T; SelectedOption : TExitMode) : Integer; |
AW: Anfängerfragen zu Generics
Wozu hierfür überhaupt Generics?
Diese 3 Interfaces scheinen doch, für dieses ExecApps, eine gemeinsame Funktion zu besitzen? Warum haben sie dann nicht alle einen gemeinsamen Vorfahren, oder daneben einen gemeinsamen Typen, welcher hier als Parameter genutzt wird? |
AW: Anfängerfragen zu Generics
Zitat:
Jetzt habe ich noch an anderen Stellen den gleichen Fehler, der die gleiche Ursache hat. Aber ich glaube ich muss die Struktur meiner XML-Datei noch mal überdenken damit das überhaupt mit Generics funktionieren kann. :( |
AW: Anfängerfragen zu Generics
Zitat:
|
AW: Anfängerfragen zu Generics
Zitat:
@Olli73 und @himitsu Danke für eure Hilfe und Denkanstösse. :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz