Einzelnen Beitrag anzeigen

benwen

Registriert seit: 11. Sep 2006
17 Beiträge
 
Delphi 7 Enterprise
 
#1

Vererbung - Abspeichen in Streams

  Alt 11. Sep 2006, 10:44
Hallo alle zusammen!

Ersteinmal ein großes Lob an dieses Forum und allen, die mir mit ihren Beiträgen schon viel weitergeholfen haben!

Nun zu meiner aktuellen Frage.
Ich habe eine Klassenstruktur definiert, welche der folgenden prinzipiell ähnelt:
Delphi-Quellcode:
Type
  TElement = class
    show: boolean;
    (...)
  end;
  
  TExElement1 = class(TEElement)
    elemID: integer;
    (...)
  end;
  
  TExElement2 = class(TEElement)
    pos: real;
    (...)
  end;

  (...)

  TMyList = class(TList)

  TExElement1List = class(TMyList)
    function GetExElement1(index: integer): TExElement1;
  public
    procedure SaveToStream(Stream: TStream);
    procedure LoadFromStream(Stream: TStream);
    property Items[index: integer]: TExElement1 Read GetExElement1
  end;
  
  TExElement2List = class(TMyList)
  (...) //das gleiche nochmal

implementation
  
  procedure TExElementList.SaveToStream(Stream: TStream);
  var
     NewExElement1: TExElement1;
     i,Len: integer;
  begin
    NewExElement1 := TExElement1.Create;
    Len := Count
    Stream.Write(Len, SizeOf(Len));
    for I := 0 to Count - 1 do
    begin
      NewExElement1 := Items[i];
      with NewExElement1 do
      begin
        Stream.Write(show, sizeof(show));
        Stream.Write(elemID, sizeof(elemID));
        (...)
      end;
    end;
  end;

  procedure TExElementList.LoadFromStream(Stream: TStream);
  var
     NewExElement1: TExElement1;
     i,Len: integer;
  begin
    Stream.Read(Len, SizeOf(Len));
    for I := 0 to Len - 1 do
    begin
      NewExElement1 := TExElement1.Create;
      with NewExElement1 do
      begin
        Stream.Read(show, sizeof(show));
        Stream.Read(elemID, sizeof(elemID));
      end;
    end;
  end;

  function TElement1List.GetExElement1(index: integer): TExElement1;
  begin
    Result := TExElement1(TMyList(self).Items[index]);
  end;

  //und fast genau das gleiche nochmal mit ExElement2...Exelement3 usw.
Wie ihr seht wird das ganze ziemlich umständlich, obwohl alle ExElemente ein paar gleiche Eigenschaften/Variablen haben durch die Vererbung. Jetzt würde ich das ganze gerne etwas rationalisieren.
1. die Methoden der TExElementLists sollten in TMyList allgemein definiert und mittels Vererbung weitergegeben werden (z.B. durch Übermittlung der jeweiligen Klasse (bsp. TExElement1, ...)
2. die Klasse TElement sollte auch schon die Grundeigenschaften in Streams speichern und aus Streams laden können, sodass in den TExElementLists nur noch die zusätzlichen Eigenschaften behandelt werden müssen.

Ist jetzt halbwegs rübergekommen, was ich möchte?
Falls ja, wär es sehr hilfreich wenn mir hier jemand auf die Sprünge hilft. DANKE schomal!

Gruß benwen
  Mit Zitat antworten Zitat