Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Ableiten von genericclass mit genericinterface


curtiss - Di 04.09.12 15:23
Titel: Ableiten von genericclass mit genericinterface
Hi und Sry,

der Titel durfte nicht länger sein :(

Kurz auf Deutsch: Ich habe Objekte die an sich der datenhaltung dienen. Jedes objekt soll seinen eigenen Mapper kennen dem sich die objekte selbst übergeben zum speichern, wenn ich am objekt speichern aufrufe. So kann ich in einem rechnungsobjekt zB, beim Artikelobjekt speichern aufrufen, ohne das ich den Mapper kenne.

Folgendes habe ich entwickwickelt:
Das Interface für die Mapper

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  IBasisMapper<T> = interface
    function getObjectByID(PID : Integer): T;
    function update(PObject: T):Boolean;
    function loeschen(PObject: T):Boolean;
    function speichern(PObject: T; PruefenJN : Boolean):Boolean;
  end;


Die Basisklasse für alle Objekte die in die DB sollen etc.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
  TBasisKlasse<T> = class(TObject)
   private
    FMapper                : IBasisMapper<T>;
    procedure SetMapper(const Value: IBasisMapper<T>);
   public
    property Mapper        : IBasisMapper<T>  read FMapper write SetMapper;
  end;


und schlussendlich meine konkrete ableitung

Delphi-Quelltext
1:
  TArtikel = class(TBasisKlasse<TArtikel>)                    


das führt jedoch zu folgendem Fehler :
[DCC Fataler Fehler] mBKKunde.pas(291): F2084 Interner Fehler: URW2306

Ich denke es liegt daran, das ich versuche eine Klasse von einer generischen klasse abzuleiten, wobei ich die ableitung in die superklasse gebe. dadurch lege ich irgendwie den compiler aufs kreuz :(

Im endeffekt geht es mir auch nur darum, das ich es erzwinge, das nach der erzeugung des objekts, ausschließlich Mapper für diesen Typ zugewiesen werden können. Das <T> in der BasisKlasse ist ja eh nur zum durchschleusen an das Interface...


jemand ne idee?