![]() |
Class methode problem in DEC
Hallo,
mir ist gerade aufgefallen, dass eine Architekturänderung neulich dazu führt, dass eines der Demo Programme nicht mehr funktioniert. Leider habe ich noch keinen Weg gefunden, wie ich das umbauen muss, damit es wie gedacht funktioniert. Worum geht's? 1. Es gibt eine Klasse TDECHash als Basisklasse aller Hash Algorithmen 2. Diese hat eine Klassenmethode ClassByName, da sich alle konkreten Implementierungen in einer Verwaltungsliste registrieren können. ClassByName gibt eine TDECHashClass zurück wenn die zu suchende Klasse in der Liste ist. TDECHashClass ist so definiert:
Delphi-Quellcode:
3. Die Architekturänderung von neulich war, dass zwischen TDECHash und den einzelnen
TDECHashClass = class of TDECHash;
Implementierungsklassen eine TDECHashAuthentication Klasse geschoben wurde und die Klassenmethode IsPasswordHash, welche das hier ausführt:
Delphi-Quellcode:
wurde
Result := self.InheritsFrom(TDECPasswordHash);
nach TDECHashAuthentication verschoben. TDECPasswordHash erbt von TDECHashAuthentication und alle in Zukunft hinzugefügten Password Hash Umsetzungen sollen von TDECPasswordHash erben. 4. Das FMX Hash Demo Programm enthält eine COmbobox mit einer Liste aller registrierter Hash Algorithmen und folgenden Code:
Delphi-Quellcode:
IsPasswordHash wird so natürlich nicht mehr gefunden, nur haben alle probierten
procedure TFormMain.ComboBoxHashFunctionChange(Sender: TObject);
begin CheckBoxIsPasswordHash.IsChecked := TDECHash.ClassByName( ComboBoxHashFunction.Items[ComboBoxHashFunction.ItemIndex]).IsPasswordHash; end; Änderungen nicht zum erfolg geführt. Wenn's compiliert hat und ich eine Hash-Klasse vererbungstechnisch auf TDECPasswordHash geändert habe war IsPasswordHash trotzdem false... Wie muss ich das anpacken, damit es sauber so wie von mir gedacht funktioniert? Grüße TurboMagic |
AW: Class methode problem in DEC
Ok, habe selber einen Lösungsansatz gefudnen:
Die Basisklasse TDECHashBase bekommt auch so eine Klassenmethode IsPasswordHash die ist virtual und liefert immer False. In TDECHashAuthentication wird diese dann überschrieben. Das funktioniert. |
AW: Class methode problem in DEC
Jupp, das ist auch eine der allgemeinen Lösungen dafür.
Eine andere Lösung wäre die Einführung eines Interfaces, aber dagegen ist das hier schon einfacher, da bereits ein gemeinsamer Vorfahre existiert. |
AW: Class methode problem in DEC
Danke!
Übrigens: die DUnit und DUnitX Projekte haben jetzt auch eingebaute TestInsight Unterstützung, falls installiert und aktiviert. :-D Und die Cipher und Hash demos wurden aktualisiert bei Google Play eingereicht. :-D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:15 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