AGB  ·  Datenschutz  ·  Impressum  







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

Ein Objekt zu Laufzeit die Klasse zuweisen

Ein Thema von Popov · begonnen am 13. Okt 2012 · letzter Beitrag vom 13. Okt 2012
Antwort Antwort
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: Ein Objekt zu Laufzeit die Klasse zuweisen

  Alt 13. Okt 2012, 18:21
Aber wozu sollten einem die Generics helfen? Beim Freigen einer beliebigen Instanz?
Einfach freigen und gut, egal was das für eine Instanz ist (wenn es eine Instanz ist)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#2

AW: Ein Objekt zu Laufzeit die Klasse zuweisen

  Alt 13. Okt 2012, 18:50
Ok, in dem einem speziellem Fall scheint es wirklich einfacher zu sein als gedacht. Da habe ich anscheinend beim überlegen paar Ebenen übersprungen und erst an einem Punkt in der Mitte angefangen. Das ist um so erstaunlicher, da ich beim testen eigentlich auch schon soweit war, nur dem Ganzen nicht getraut habe, weil es für mich zu einfach war. Ich dachte es funktioniert nur zufällig. Bisher auf jeden Fall danke.

Trotzdem interessiert mich das Prinzip im allgemeinem. Jetzt weniger um ein Problem zu lösen als um die Machbarkeit festzustellen.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Ein Objekt zu Laufzeit die Klasse zuweisen

  Alt 13. Okt 2012, 19:02
Es ist auf jeden Fall nicht möglich eine Instanz auf eine andere Klasse umzustellen.
z.B. eine TStringList auf ein TButton
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

AW: Ein Objekt zu Laufzeit die Klasse zuweisen

  Alt 13. Okt 2012, 19:25
Erstell dir eine Basisklasse und deklariere den constructor und destructor als virtual. Wenn du dann bei den konkreten Objekten die Methoden überschreibst, wird automatisch die richtige Funktion ausgeführt. Sind die Methoden nicht virtual, dann wird bei diesem Beispiel nur die Funktion der Basisklasse in Betracht gezogen.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Ein Objekt zu Laufzeit die Klasse zuweisen

  Alt 13. Okt 2012, 19:34
Erstell dir eine Basisklasse und deklariere den constructor und destructor als virtual.
Der Destructor ist schon ab TObject virtual Nix zu tun und für jedes Objekt verfügbar. Ebenso wie Free.

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#6

AW: Ein Objekt zu Laufzeit die Klasse zuweisen

  Alt 13. Okt 2012, 19:48
Es ist auf jeden Fall nicht möglich eine Instanz auf eine andere Klasse umzustellen.
z.B. eine TStringList auf ein TButton
Mir ist auch klar, dass ich aus einer TStringList keinen TButton machen kann. Aber das will ich auch nicht, denn der Button ist ja eigentlich schon da. Ich will der Objektvariable nur sagen, dass sie jetzt nicht mehr TStringList ist, sondern TButton. Ist wie beim Autoverkauf, das Auto ist da, es wechselt nur der Besitzer. Der TButtom ist im Speicher, ich weiß, dass es ein TButton ist und ich hab auch seine Adresse. Denn seinen wir mal ehrlich, eine Objektvariable ist eigentlich nur ein Integerwert mit der Adresse. Dem ist es eigentlich Schnuppe ob es ein TStringList ist oder ein TButton. Nur wurde eben irgendwo vermerkt, das die Objektvariable ein TStringList. Und die Frage ist ob man das ändern kann.

@Zacherl

Wäre evtl. möglich, aber dann fängt es an wieder komplex zu werden.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Ein Objekt zu Laufzeit die Klasse zuweisen

  Alt 13. Okt 2012, 20:03
Dann hast du - entschuldige bitte - aber die Frage völlig falsch gestellt.
Denn du willst einer Objektvariablen zur Laufzeit eine andere Instanzreferenz zuweisen und nicht einem Objekt eine Klasse

Und wo ist das Problem?

Um ganz sicher zu gehen, dass es funktioniert, definiere die Variable als TObject, dann kann dort jede Instanz-Referenz abgelegt werden, die von TObject abgeleitet wurde (also jede)
Ok, per hartem Cast kann man auch alles machen, ist aber nicht ratsam.

Wo ist denn das eigentliche Problem?

Zeig doch mal ein wenig Code, wo du da ein Problem siehst.

EDIT hmmm, suchst du so etwas wie das Visitor Pattern? Schau mal beim Uwe Raabe auf der Blogseite rein, der hat da in 4 Teilen etwas sehr kreatives abgeliefert
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (13. Okt 2012 um 20:07 Uhr)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#8

AW: Ein Objekt zu Laufzeit die Klasse zuweisen

  Alt 13. Okt 2012, 20:21
Das eigentlich Problem ist, dass nichts bisher funktionierte was ich getestet habe. Vielleicht liegt das Problem im Detail. Ich mache noch paar Versuche.

//Edit:

Nein, es funktioniert doch nicht. Wie gesagt, anscheinend habe ich beim ersten Mal das Problem richtig beschrieben, beim zweiten Mal zu Missverständnissen geführt.

Aber letztendlich ist es egal, es war eher nur eine Idee und eine Frage der Machbarkeit. Kein eigentliches Problem, mehr Interesse. Aber wenn ich gerade so überlege, dann kann das nicht klappen. Selbst wenn es klappen würde, wahrscheinlich würde der Compiler es nicht mitmachen. Wenn ich z.B. Tmp.Canvas im Code eingebe, dann macht er das beim falschen Objekt sowieso nicht mit.

Geändert von Popov (13. Okt 2012 um 20:40 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Ein Objekt zu Laufzeit die Klasse zuweisen

  Alt 13. Okt 2012, 20:29
Das eigentlich Problem ist, dass nichts bisher funktionierte was ich getestet habe. Vielleicht liegt das Problem im Detail. Ich mache noch paar Versuche.
Wenn du uns - oder mir - mal erklären würdest, was du denn wirklich machen möchtest, dann erhöhen sich die Chancen schlagartig. Mir ist es auf jeden Fall noch nicht ganz klar

Möchtest du evtl. in dieser Richtung?
Delphi-Quellcode:
procedure DoSomething( AInstance : TObject );
begin
  ...
end;
Übergibst du eine TButton Instanz, soll die Caption geändert werden, übergibst du eine Instanz von TStringList, dann soll der Inhalt gelöscht werden.

Suchst du sowas in der Art?
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (13. Okt 2012 um 20:33 Uhr)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#10

AW: Ein Objekt zu Laufzeit die Klasse zuweisen

  Alt 13. Okt 2012, 23:42
Es ist auf jeden Fall nicht möglich eine Instanz auf eine andere Klasse umzustellen.
z.B. eine TStringList auf ein TButton
Aber eine TStringList auf eine abgeleitete Klasse.
Delphi-Quellcode:
type
  PClass = ^TClass;
begin
  if MyObject is TBaseObject then
    PClass(MyObject)^ := TDerivedObject;
...
end
  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 11:48 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