AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Class methode problem in DEC

Ein Thema von TurboMagic · begonnen am 28. Feb 2021 · letzter Beitrag vom 28. Feb 2021
Antwort Antwort
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.809 Beiträge
 
Delphi 12 Athens
 
#1

Class methode problem in DEC

  Alt 28. Feb 2021, 08:30
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:
TDECHashClass = class of TDECHash; 3. Die Architekturänderung von neulich war, dass zwischen TDECHash und den einzelnen
Implementierungsklassen eine TDECHashAuthentication Klasse geschoben wurde und die
Klassenmethode IsPasswordHash, welche das hier ausführt:
Result := self.InheritsFrom(TDECPasswordHash); wurde
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:
   procedure TFormMain.ComboBoxHashFunctionChange(Sender: TObject);
   begin
     CheckBoxIsPasswordHash.IsChecked :=
       TDECHash.ClassByName(
        ComboBoxHashFunction.Items[ComboBoxHashFunction.ItemIndex]).IsPasswordHash;
   end;
IsPasswordHash wird so natürlich nicht mehr gefunden, nur haben alle probierten
Ä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
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.809 Beiträge
 
Delphi 12 Athens
 
#2

AW: Class methode problem in DEC

  Alt 28. Feb 2021, 10:38
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.110 Beiträge
 
Delphi 12 Athens
 
#3

AW: Class methode problem in DEC

  Alt 28. Feb 2021, 15:40
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.809 Beiträge
 
Delphi 12 Athens
 
#4

AW: Class methode problem in DEC

  Alt 28. Feb 2021, 16:37
Danke!

Übrigens: die DUnit und DUnitX Projekte haben jetzt auch eingebaute TestInsight Unterstützung,
falls installiert und aktiviert.

Und die Cipher und Hash demos wurden aktualisiert bei Google Play eingereicht.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz