Thema: Delphi Klasse mit Konstanten ?

Einzelnen Beitrag anzeigen

tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#17

Re: Klasse mit Konstanten ?

  Alt 7. Sep 2005, 10:32
Warum müssen das denn überhaupt verschiedene Klassen sein? Die sehen nämlich eigentlich alle ziemlich gleich aus. Ich würd's so machen

Delphi-Quellcode:
type TRuneTypes = (rtX, rtY, rtZ);
const RuneRarities: array[0..2] of integer = [100, 200, 300];
      RuneColors: array[0..2] of TColor = [clGrey, clTeal, clRed]; // Da bin ich mir mit der Syntax nicht ganz sicher

type TRune = class
       constructor Create(RuneType: TRuneType);
     private
       FRuneType: TRuneType;
       function GetRarity: integer;
       function GetColor: integer;
     public
       property RuneType: TRuneType read FRuneType write FRuneType;
       property Rarity: integer read GetRarity;
       property Color: TColor read GetColor;
     end;

constructor TRune.Create(RuneType: TRuneType);
begin
  inherited Create;
  FRuneType := RuneType;
end;

function TRune.GetRarity: integer;
begin
  Result := RuneRarities[ord(RuneType)];
end;

function TRune.GetColor: TColor;
begin
  Result := RuneColors[ord(RuneType)];
end;
//edit
Ah, seh gerade dass dir die Performance so wichtig ist. Dann könnte man das auch so machen:
Delphi-Quellcode:
const RuneRarities: array[0..2] of integer = [100, 200, 300];
      RuneColors: array[0..2] of TColor = [clGrey, clTeal, clRed]; // Da bin ich mir mit der Syntax nicht ganz sicher

type TRune = class
       constructor Create(ARuneType: TRuneType);
     private
       FRuneType: TRuneType;
       FRarity: integer;
       FColor: TColor;
       procedure SetRuneType(Value: TRuneType);
       procedure Recalculate;
     public
       property RuneType: TRuneType read FRuneType write SetRuneType;
       property Rarity: integer read FRarity;
       property Color: TColor read FColor;
     end;

constructor TRune.Create(ARuneType: TRuneType);
begin
  inherited Create;
  RuneType := ARuneType; // Ruft den Setter auf zum Initialisieren;
end;

procedure TRune.Recalculate;
begin
  FRarity := RuneRarities[ord(RuneType)];
  FColor := RuneColors[ord(RuneType)];
end;

procedure TRune.SetRuneType(Value: TRuneType);
begin
  if Value <> RuneType then begin
    FRuneType := Value;
    Recalculate; // Alles neu berechnen
  end;
end;
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat