Einzelnen Beitrag anzeigen

stimpinski

Registriert seit: 5. Mai 2009
3 Beiträge
 
#4

Re: (D2009) Generics mit Array als Feldvariable: Interner Fe

  Alt 15. Apr 2010, 17:29
So, nach einigem experimentieren mit den Delphi2009 Generics bin ich zu folgendem Ergebnis gekommen:

1. Wenn du Arrays als Feldvariablen einer generischen Klasse verwenden möchtest, definiere sie vorher als eigenen Typen.

Delphi-Quellcode:
type

  TMyIntegerArray = Array of Integer;

  TMyGenericClass<T> = class(TObject)
  private
    FIntegerArray: TMyIntegerArray;
  public
    constructor Create;
    // etc
  end;
2. Wenn du eine generische Klasse von einer generischen Klasse verwenden möchtest, dann baue einen Wrapper um die innere generische Klasse.

Delphi-Quellcode:
type

  TMyDummieClass = class(TObject)
    constructor Create;
    // etc
  end;

  TMyGenericClass<T> = class(TOjbect)
    constructor Create;
    // etc
  end;

  // wrapper klasse für TMyGenericClass<TMyDummieClass>
  TMyGenericClassWrapper = class(TObject)
  private
    FMyGenericClass: TMyGenericClass<TMyDummieClass>;
  public
    constructor Create; // ruft auf FMyGenericClass := TMyGenericClass<TMyDummieClass>.Create;
    // etc
  end;

  TMyOtherGenericClass<T> = class(TObject)
    constructor Create;
    // etc
  end;
Statt
Delphi-Quellcode:
var
  LLocalVariable: TMyOtherGenericClass<TMyGenericClass<TMyDummieClass>>;
verwendet man einfach
Delphi-Quellcode:
var
  LLocalVariable: TMyOtherGenericClass<TMyGenericClassWrapper>;
Das ist zwar wenig elegant, weil ich für jeden Typ den ich in die innere generische Klasse stecke einen neuen Wrapper schreiben muss, andererseits erhalte ich jetzt keine kryptischen Fehlermeldungen vom Compiler mehr.
  Mit Zitat antworten Zitat