Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Checksumme einer Klasse erzeugen? (https://www.delphipraxis.net/162266-checksumme-einer-klasse-erzeugen.html)

delphinub23 15. Aug 2011 09:59

Checksumme einer Klasse erzeugen?
 
Hallo DPler,

ist es möglich eine Checksumme einer Klasse zu erzeugen?
Wenn ich z.B. eine Klasse hätte die Informationen (z.B.: Strings) hält, könnte ich mir von dieser Klasse eine Checksumme erstellen um irgendwann später auf Veränderungen der Information reagieren zu können?

MfG,
dnub

stahli 15. Aug 2011 10:13

AW: Checksumme einer Klasse erzeugen?
 
Na ja, natürlich kannst Du Dir eine Funktion schreiben, die mit Deinen Propertys irgend etwas durchführt, um eine Checksumme o.ä. zu erhalten. Diese kannst Du in einem privaten Feld speichern und später mit einer erneuten Berechnung vergleichen.

Die besser Lösung wird aber sein, ein den Settern der Proertys direkt auf Änderungen zu reagieren bzw. dort ein Änderungsflag zu setzen, das Du später auswerten kannst.

DeddyH 15. Aug 2011 10:18

AW: Checksumme einer Klasse erzeugen?
 
Ich sehe das genauso wie stahli. Die Frage, die sich mir stellt, ist: wer ändert denn wann die Daten? Brauchst Du einen Vorgabewert, mit dem Du ggf. vergleichen kannst, wenn die Daten z.B. aus einer Datei ausgelesen werden sollen? Erklär doch einmal genauer, was der Zweck der Übung sein soll, dann kann man bestimmt mehr dazu sagen.

delphinub23 15. Aug 2011 10:41

AW: Checksumme einer Klasse erzeugen?
 
Danke erstmal für die schnellen Antworten.

Der Nutzer gibt Daten in einer Art Wizard ein. Diese Information werden in eine Klasse mit entsprechenden properties geschrieben.
Die Klasse wird ein Versionsfeld besitzen. Dieses Versionsfeld soll hochgezählt werden, wenn der Anwender diese Daten ändert.

Diese Problematik würde ich gern mit einer Checksumme der Klasse lösen.

MfG,
dnub

shmia 15. Aug 2011 19:27

AW: Checksumme einer Klasse erzeugen?
 
Hier kommt eine Beispielklasse, die zeigt wie man mit wenig Aufwand
alle Properties überprüfen kann.

Delphi-Quellcode:
interface

type
TMeinWizzard = class(TObject)
  private
    FModifyCount : Integer; // Anzahl geänderter Properties
    FStringProp: string;
    FIntProp: Integer;

    // Hilfsfunktionen, für das interne Zuweisen von Properties
    procedure CheckInteger(var p:Integer; value:Integer);
    procedure CheckString(var p:string; const value:string);

    procedure SetStringProp(const Value: string);
    procedure SetIntProp(const Value: Integer);
public
  // zwei beispielhafte Properties
  property StringProp:string read FStringProp write SetStringProp;
  property IntProp:Integer read FIntProp write SetIntProp;

  // Anzahl der Änderungen
  property ModifyCount:Integer read FModifyCount write FModifyCount;
end;

implementation

{ TMeinWizzard }

procedure TMeinWizzard.CheckInteger(var p: Integer; value: Integer);
begin
   if p <> value then
   begin
      p := value;
      Inc(FModifyCount);
   end;
end;

procedure TMeinWizzard.CheckString(var p: string; const value: string);
begin
   if p <> value then
   begin
      p := value;
      Inc(FModifyCount);
   end;
end;

procedure TMeinWizzard.SetIntProp(const Value: Integer);
begin
   CheckInteger(FIntProp, Value);
end;

procedure TMeinWizzard.SetStringProp(const Value: string);
begin
   Checkstring(FStringProp, Value);
end;

delphinub23 16. Aug 2011 20:00

AW: Checksumme einer Klasse erzeugen?
 
Danke für dieses Beispiel.

Ich hatte dieselbe Idee, nur gefiel sie mir nicht so sehr. Da ich aber bisher keine besser Lösung finden konnte, werde ich diese wohl implementieren müssen.

Wenn sonst noch jemand eine Idee hat, nicht zögern und zur Fragerunde beitragen :)

MfG,
dnub


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:19 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