AGB  ·  Datenschutz  ·  Impressum  







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

Alternative zu Typecast => IInterface?

Ein Thema von bytecook · begonnen am 17. Nov 2016 · letzter Beitrag vom 17. Nov 2016
 
Benutzerbild von bytecook
bytecook

Registriert seit: 6. Aug 2010
Ort: Dornbirn
151 Beiträge
 
Delphi 11 Alexandria
 
#1

Alternative zu Typecast => IInterface?

  Alt 17. Nov 2016, 10:40
Hallo Leute,

ich bin die letzten Wochen immer wieder hier im Forum auf Interfaces gestoßen, und frage mich, ob diese meinen Code sicherer/eleganter machen könnten...

Folgende Ausgangssituation:

Habe eine Basisklasse TSVFXCustomCmd. Dieser dient als Vorfahr verschiedener Klassen, die u.a unterschiedliche Routinen zur Verfügung stellen.

Die Klasse TSVFXVisualCmd deklariert beispielsweise eine Routine mit dem Namen Prozess(), die in den abgeleiteten Routinen überschrieben werden.

Alle diese Klassen von einer abgeleiteten Containerklasse vom TObjectList verwaltet (OwnsObject ist True). Keine Generics im Moment.

Klassenableitungen

TSVFXCustomCmd <= Basisklasse, verschiedene Properties
TSVFXVisualCmd <= abgeleitet von TSVFXCustomCmd, stellt verschiedene Basiskommandos zur Verfügung
TSVFXMoveTo <= abgeleitet von TSVFXVisualCmd, Pfadkommando
..
TSVFXQBezier <= abgeleitet von TSVFXVisualCmd, Pfadkommando
..
TSVFXCircle <= abgeleitet von TSVFXVisualCmd, Primitivekommando
..
TSVFXTransformCmd <= abgeleitet von TSVFXCustomCmd, stellt verschiedene Basiskommandos zur Verfügung
TSVFXScale <= abgeleitet von TSVFXTransformCmd
TSVFXRotate <= abgeleitet von TSVFXTransformCmd
..
TSVFXAnimateCmd <= abgeleitet von TSVFXCustomCmd, stellt verschiedene Basiskommandos zur Verfügung
..
TSVFXColorCmd <= abgeleitet von TSVFXCustomCmd, stellt verschiedene Basiskommandos zur Verfügung
..

Es kommen immer wieder neue Befehle hinzu, einige Routinen müssen jedesmal um Typecasts erweitert werden, das hätte ich mir gerne gespart.

Beim Abarbeiten der Objektliste werden objektspezifisch verschiedene Kommandos ausgeführt. Momentan vergleiche ich jedes Objekt mit einem Typecast gegen einen Objekttyp und starte dann die Routinen beispielsweise wie folgt:

Ausgangsszenario
Code:
 
 if (Self[i]) is TSVFXVisualCommand) then begin
   (** TSVFXMoveTo **)
   if Self[i] is TSVFXMoveTo then begin
     TSVFXMoveTo(Self[i]).Process (APath);
   end;
   ..
   ..
 end;
Wunschszenario
Code:
 
 if (Self[i]) is TSVFXVisualCommand) then
   TSVFXVisualCommand(Self[i])).Process (APath); <= abgeleiteter Befehl soll ausgeführt werden.
Diese Typecasts gegen KlassenTypen <TSVFXMoveTo(Self[i]).Process (APath);> hätte ich teilweise gerne vermieden. Bei einem Typecast gegen TSVFXVisualCommand wird verständlicherweise nicht die vom eigentlichen Objekt überschriebene Override Routine aufgerufen. Deklariere ich das Interface in der Klasse TSVFXVisualCommand, so muss ich das nach meinem derzeitigen Wissensstand auch dort implementieren, somit bringt dies nichts. Implementiere ich dieses Interface in den abgeleiteten Klassen, so lande ich wieder beim Typecast...

Höchstwahrscheinlich übersehe ich hier etwas wesentliches, bin generell auf dem Holzweg, oder Typecast ist und bleibt mein Ding...

Gruß,

Peter
Peter
Was mache ich, wenn ein Bär meine Frau angreift?
Nichts. Er hat sie angegriffen, soll er doch selber sehen, wie er sich verteidigt.
  Mit Zitat antworten Zitat
 


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 03:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz