AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Generics mit abgeleiten Klassen

Ein Thema von backdraft · begonnen am 19. Okt 2011 · letzter Beitrag vom 19. Okt 2011
Antwort Antwort
Seite 1 von 2  1 2      
backdraft

Registriert seit: 19. Apr 2005
Ort: Hückeswagen
335 Beiträge
 
Delphi 11 Alexandria
 
#1

Generics mit abgeleiten Klassen

  Alt 19. Okt 2011, 14:11
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?
Oliver
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#2

AW: Generics mit abgeleiten Klassen

  Alt 19. Okt 2011, 14:38
Der Fehler liegt im Constructor. Dort wird einer Variablen vom Type T (= TMyExtended) ein TMyBase zugewiesen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
backdraft

Registriert seit: 19. Apr 2005
Ort: Hückeswagen
335 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Generics mit abgeleiten Klassen

  Alt 19. Okt 2011, 15:13
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 ...
Oliver
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: Generics mit abgeleiten Klassen

  Alt 19. Okt 2011, 15:26
Versuch mal 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 )
$2B or not $2B
  Mit Zitat antworten Zitat
backdraft

Registriert seit: 19. Apr 2005
Ort: Hückeswagen
335 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Generics mit abgeleiten Klassen

  Alt 19. Okt 2011, 15:42
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
Oliver
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

AW: Generics mit abgeleiten Klassen

  Alt 19. Okt 2011, 15:51
Laut Warnung will der Compiler sowas haben: 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.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#7

AW: Generics mit abgeleiten Klassen

  Alt 19. Okt 2011, 16:15
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 TMyBase.Create dann auch noch virtual .
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
backdraft

Registriert seit: 19. Apr 2005
Ort: Hückeswagen
335 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Generics mit abgeleiten Klassen

  Alt 19. Okt 2011, 16:32
Hat geklappt,
vielen Dank für die schnelle Hilfe, also da muss man erstmal drauf kommen.
Wo steht sowas?
Oliver
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#9

AW: Generics mit abgeleiten Klassen

  Alt 19. Okt 2011, 18:19
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.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#10

AW: Generics mit abgeleiten Klassen

  Alt 19. Okt 2011, 18:51
Wenn alles irgendwo stehen würde, bräuchtma doch die DP nich

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

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.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (19. Okt 2011 um 18:54 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:38 Uhr.
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