Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Generics mit abgeleiten Klassen (https://www.delphipraxis.net/163860-generics-mit-abgeleiten-klassen.html)

backdraft 19. Okt 2011 13:11

Generics mit abgeleiten Klassen
 
Hallo zusammen,

ich probiere mich heute das erste mal an Generics und habe irgendwie ein Verständnisproblem.

Ich habe eine Basisklasse und davon eine Ableitung.
Jetzt möchte ich, dass meine Generic Klasse entweder die Basisklasse nimmt, oder die Ableitung.

Code:
unit MyClass;

interface

type
  TMyBase = class
  private
    FBaseProperty: Integer;
  public
    property BaseProperty: Integer read FBaseProperty write FBaseProperty;
  end;

  TMyExtended = class(TMyBase)
  private
    FExtendedProperty: Integer;
  public
    property ExtendedProperty: Integer read FExtendedProperty write FExtendedProperty;
  end;

  TMyGeneric<T: TMyBase>=class
  private
    FMyItem: T;
  public
    constructor Create;
    property MyItem: T read FMyItem;
  end;

  TMyBaseClass = TMyGeneric<TMyBase>;
  TMyExtendedClass = TMyGeneric<TMyExtended>;

var
  vMyBaseItem: TMyBaseClass;
  vMyExtendedItem: TMyExtendedClass;

implementation

{ TMyGeneric<T> }

constructor TMyGeneric<T>.Create;
begin
  inherited;
  FMyItem := TMyBase(T).Create;
end;

end.
Es knallt an der Stelle
Code:
 TMyExtendedClass = TMyGeneric<TMyExtended>;
E2010 Inkompatible Typen: 'TMyExtended' und 'TMyBase'

Was mache ich denn falsch?

Uwe Raabe 19. Okt 2011 13:38

AW: Generics mit abgeleiten Klassen
 
Der Fehler liegt im Constructor. Dort wird einer Variablen vom Type T (= TMyExtended) ein TMyBase zugewiesen.

backdraft 19. Okt 2011 14:13

AW: Generics mit abgeleiten Klassen
 
Ich hasse Delphi, wenn es nicht sagt in welcher Zeile der Fehler ist,
ABER Du hast recht, wenn ich die Zeile auskommentiere gehts...
OK, wie ist der Aufruf denn richtig?
Vielen Dank schonmal für die schnelle Hilfe ...

himitsu 19. Okt 2011 14:26

AW: Generics mit abgeleiten Klassen
 
Versuch mal
Delphi-Quellcode:
FMyItem := T.Create;
.

Entweder mußt du T.Crete schreiben oder das FMyItem nochmal nach TMyBase casten, vor der Zuweisung.
(gibt halt ein paar kleine Bugs in diesen Generics :roll:)

backdraft 19. Okt 2011 14:42

AW: Generics mit abgeleiten Klassen
 
Hallo,
klappt leider beides nicht.
Ich bekomm einen Fehlert und stehe auf T.Create

Meldung:
Neue Instanz kann ohne CONSTRUCTOR-Einschränkung in der Typparameterdeklaration nicht erstellt werden

himitsu 19. Okt 2011 14:51

AW: Generics mit abgeleiten Klassen
 
Laut Warnung will der Compiler sowas haben:
Delphi-Quellcode:
TMyGeneric<T: constructor>=class
.
k.A. ob man diese beiden Beschränkgen kombinieren kann,

Schön, daß man im XE jetzt auch direkt Typen angeben kann, aber so richtig funktioniert es dann wohl doch noch nicht. :roll:

Uwe Raabe 19. Okt 2011 15:15

AW: Generics mit abgeleiten Klassen
 
Delphi-Quellcode:
 
type
  TMyGeneric<T: constructor, TMyBase> = class
  private
    FMyItem: T;
  public
    constructor Create;
    property MyItem: T read FMyItem;
  end;

constructor TMyGeneric<T>.Create;
begin
  inherited;
  FMyItem := T.Create;
end;
Geschickterweise macht man das
Delphi-Quellcode:
TMyBase.Create
dann auch noch
Delphi-Quellcode:
virtual
.

backdraft 19. Okt 2011 15:32

AW: Generics mit abgeleiten Klassen
 
Hat geklappt,
vielen Dank für die schnelle Hilfe, also da muss man erstmal drauf kommen.
Wo steht sowas?

Iwo Asnet 19. Okt 2011 17:19

AW: Generics mit abgeleiten Klassen
 
Von C# aus gesehen (von denen Emba wohl hier ein wenig abschreibt) ist das ein wenig logischer.

Und Metaklassen und Konstruktoren sind schon ein Thema für sich.

Unterm Strich: Man muss es einfach wissen oder jemanden kennen, der es weiss.

Stevie 19. Okt 2011 17:51

AW: Generics mit abgeleiten Klassen
 
Wenn alles irgendwo stehen würde, bräuchtma doch die DP nich ;)

Mir fällt gerade auf... jetzt stehts hier! :thumb:

Aber mal Spaß beiseite: gerade was die neuen Features wie Generics, RTTI, anonyme Methoden und so Zeugs angeht gibt es keine lückenlose Dokumentation. Da ist man am besten beraten, bestimmte Blogs zu verfolgen und Google und/oder die DP zu Rate zu ziehen. Auch Marco Cantus Delphi Handbücher enthalten einiges an Wissen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:42 Uhr.
Seite 1 von 2  1 2      

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