AGB  ·  Datenschutz  ·  Impressum  







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

With MyObject as MyObject.ClassType Do

Ein Thema von QuickAndDirty · begonnen am 25. Mai 2007 · letzter Beitrag vom 30. Mai 2007
Antwort Antwort
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.889 Beiträge
 
Delphi 12 Athens
 
#1

With MyObject as MyObject.ClassType Do

  Alt 25. Mai 2007, 11:09
With MyObject as MyObject.ClassType Do Wie kann ich sowas erreichen?

Es handelt sich um 2 Tdataset Nachfahren die über die selben Methoden verfügen.
Ich kann nur eine davon umschreiben.
Gibt es ein Interface das TTable implemtiert?
Kann ich einfach casten auch wenn die verwendeten Methoden nicht in TDataset vorhanden sind?

In Java könnte man sowas glaube ich über Aspekte oder Prototypen lösen gibt es sowas ähnliches in Delphi?
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#2

Re: With MyObject as MyObject.ClassType Do

  Alt 25. Mai 2007, 11:52
Zitat von QuickAndDirty:
With MyObject as MyObject.ClassType Do Wie kann ich sowas erreichen?

Es handelt sich um 2 Tdataset Nachfahren die über die selben Methoden verfügen.
Ich kann nur eine davon umschreiben.
Gibt es ein Interface das TTable implemtiert?
Kann ich einfach casten auch wenn die verwendeten Methoden nicht in TDataset vorhanden sind?
Nope, die VCL wurde leider nie aufgepeppt um Interfaces zu benutzen.
Gerade bei Datenbankzugriffskomponenten ist das Ergebnis der Kuddelmuddel den man jetzt hat...

Was du hier machen kannst wäre Wrapper anzulegen, die ein Interface implementieren.
Und dann eine Factory, wo du die Instanz des Datasets reinwirfst und eine Interface referenz des Wrappers zurückbekommst.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.889 Beiträge
 
Delphi 12 Athens
 
#3

Re: With MyObject as MyObject.ClassType Do

  Alt 28. Mai 2007, 17:08
ICh wollte einfach vermeiden 2 identische Codeblöcke (ganz große) hin zu klatschen
für jedes der Tdatasets den selben, mit einer anderen
With bla as Tblabla do drumm herum.

Wenn ich das über einen Wrapper mache der mir ein interface zurrück gibt müste ich
in der Wrapper classe trotzdem jeden der Beiden TDataset Datentypen einzeln behandeln
zumindest für Indexfieldnames, Tablename, Databasename, etc.

Also keine so tolle Lösung dann lieber Copy&Paste
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: With MyObject as MyObject.ClassType Do

  Alt 28. Mai 2007, 17:19
das was du vor hast geht nicht. Die with-Anweisung ist einfach nur für schreibfaule und wird zum Zeitpunkt des compilierens aufgelöst. Daher kannst du dort keinen dynamichen Datentyp nutzen. Ansonsten wäre es eine Interpretersprache.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#5

Re: With MyObject as MyObject.ClassType Do

  Alt 28. Mai 2007, 20:37
Zitat von QuickAndDirty:
Wenn ich das über einen Wrapper mache der mir ein interface zurrück gibt müste ich
in der Wrapper classe trotzdem jeden der Beiden TDataset Datentypen einzeln behandeln
zumindest für Indexfieldnames, Tablename, Databasename, etc.
Du könntest auch von beiden Klassen ableiten und nix weiter machen als das Interface hinzuzufügen.
Wenn die Member, die du gleich behandeln willst wirklich gleich heißen und gleich deklariert sind,würde es schon reichen nur die im Interface aufzuführen.
Das Interface würde dann implizit implementiert werden.
Zitat:
Also keine so tolle Lösung dann lieber Copy&Paste
Lol? Natürlich wäre das trotzdem besser als Copy & Waste, selbst wenn du die Calls zum Interface durchschleifen müsstest!
Wie willst du sie denn sonst im Code gleich behandeln? Sie haben ja nicht die gleiche Hierarchie.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.889 Beiträge
 
Delphi 12 Athens
 
#6

Re: With MyObject as MyObject.ClassType Do

  Alt 29. Mai 2007, 10:12
Ah, ja jetzt verstehe ich was du meinst.
Gut das hört sich nach einer Brauchbaren Lösung an.
Ich entwerfe Ein Interfaface ITable
und ich leite von TMyTable eine klasse ab die Ttable implementiert und sonst nichts tut ja ?
Genau das slebe mache ich mit dem nnot good Old TTable so das ich quase beide Klassen über
ihre Nachfahren mit dem Selben Interface versorgt habe.

Kann ich dann einfach auf with aDataset as ITable do casten?
Könnte ich einen Vorfahren als einen Identischen Nachfahren Casten? Oder muss ich
wirklich adataset := TInterfacedTable.create(self); machen?
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#7

Re: With MyObject as MyObject.ClassType Do

  Alt 29. Mai 2007, 11:08
Zitat von QuickAndDirty:
Kann ich dann einfach auf with aDataset as ITable do casten?
Ja. Du solltest dem interface aber eine GUID geben, sonst kann der as-Operator nicht funktionieren. (Er verwendet QueryInterface)

Zitat:
Könnte ich einen Vorfahren als einen Identischen Nachfahren Casten? Oder muss ich
wirklich adataset := TInterfacedTable.create(self); machen?
Du hast das wieder so schön nichtssagend schwammig ausgedrückt...

Generell gilt: Eine Instanz von TBlabla sollte man nicht einfach als TAbleitungVonBlabla benutzen, außer man weiß ganz genau was man da macht und vor allem warum man es macht.

Wenn du beide (oder zukünftig mehr) Klassen ableiten und dein Interface implementieren kannst, und wenn du die Stellen, in denen die alten Klassen benutzt werden, durch die Ableitungen ersetzen kannst. Nunja, dann bräuchtest du keine Zauberei.

Wenn das nicht geht wäre die einzige vernünftige Lösung einen Wrapper anzulegen, der das Interface implementiert und eine Factory, die aus einer Dataset-Instanz eine Referenz auf den Wrapper zurückgeben kann.
Klingt alles viel schlimmer als es tatsächlich ist.

btw: Interfaces gehören IMHO genau wie Klassen zu den absoluten Grundlagen in Delphi.
Du solltest dich also definitiv damit auseinandersetzen.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.889 Beiträge
 
Delphi 12 Athens
 
#8

Re: With MyObject as MyObject.ClassType Do

  Alt 30. Mai 2007, 10:54
Ich habe mich immer wenn ich es mal brauchte damit auseinander Gesetzt, aber ich muss zu geben
das es eher ein Teil meines passiven Delphisprachschatzes ist...

Der Begriff Factory sagt mir irgendwie nichts? Meinst du eine Klasse , Objekt oder Klassen Methode
die im Prinzip Objekte erzeugt?
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:18 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