Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Zacherl,
16. Apr 2017
Ja gibt es :-D Siehe meinen letzten Post. Du musst den generischen Parameter an deine Klasse attachen und NICHT hardcoded an TObjectList. Also type TMyObjectList<T: TBaseClass> = class(TObjectList<T>) statt type TMyObjectList = class(TObjectList<TBaseClass>).
Dann verwendest du für die Typ1/TBasisClass Listen die Deklaration var List: TMyObjectList<TBaseClass> und für die Typ2/TDerivedClass...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Zacherl,
16. Apr 2017
Ich glaube du hast da irgendwo noch einen Logikfehler. Sollte es nicht eher so sein:
type
TListe<T: TBasis> = class(TObjectList<T>)
public
procedure SortiereVar1(Wert:integer)
end;
Dann hast du nämlich keinerlei Probleme später bei den konkreten Instanzen folgendes zu machen:
var
List1: TListe<TErbe>;
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Zacherl,
16. Apr 2017
Dachte ursprünglich, dass man dann das Constraint auf TBaseClass nicht anwenden kann, aber scheint zu funktionieren, also spricht nichts mehr dagegen :stupid:
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Zacherl,
15. Apr 2017
Die Felder werden verdeckt. Wenn du also z.b. eine Instanz von TErbe erstellst und dann Var1 den Wert 42 zuweist, ist TBasis.Var1 immer noch 0. Da dies eine ziemlich häufige Fehlerquelle ist, würde ich dir davon definitiv abraten (macht auch wirklich selten Sinn). Wenn du die Felder in TErbe einfach weglässt, kannst du ja trotzdem auf die vererbten Felder aus TBasis zugreifen, auch wenn deine...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Zacherl,
15. Apr 2017
Ganz normale Vererbung halt:
type
TBaseClass = class(TObject)
public
procedure CommonTest;
end;
TClass1 = class(TBaseClass)
public
procedure OnlyForClass1;
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Zacherl,
15. Apr 2017
Bin nicht sicher, ob ich dein Anliegen richtig verstanden habe, aber das klingt für mich, als könntest du dafür eine generische Klasse erstellen. Den generischen Typ beschränkst du auf ein eigenes Interface, welches alle erforderlichen Operationen unterstüzt. Typ1 und Typ2 müssen dann nur noch das Interface implementieren.
Alternativ ohne Interfaces und dafür mit gemeinsamer Basisklasse.