![]() |
Weiterentwickelndes Object???
Ich hätte da mal wieder so eine kleine Frage :mrgreen:
Ist es möglich, dass sich ein Object selber weiterentwickelt, oder besser selbstständig upgradet? Angenommen ich habe eine Klasse TTestyBase = Class mit einer Procedure Readstring... Ist es nun möglich, dass sich das Object durch diese Procedure in eines von ihm Abgeleiteten Klassen wandelt? z.B.: Ist im String ein Integer, dann in die Klasse TTestyInteger = Class( TTestyBase ) oder es ist im String ein Float, dann in die Klasse TTestyFloat = Class( TTestyBase ) Geht sowas? Ohne das ich jetzt noch eine Klasse benötige, die die Sache Händelt? :gruebel: Bye |
Re: Weiterentwickelndes Object???
AI - künstliche Intelligenz
|
Re: Weiterentwickelndes Object???
Zitat:
OK Spass beiseite, dass hilft mir nicht wirklich weiter... Bye |
Re: Weiterentwickelndes Object???
Zitat:
Beim Erzeugen eines Objekts muss die Klasse schon feststehen. Mit undokumentierten Tricks kann man nachträglich die Klasse eines Objekts verändern; das ist aber absolut nicht zu empfehlen. Du kannst allerdings eine Factory-Klasse benützen, um deine Objekte zu erzeugen. Die Verwendung einer Factory-Klasse mag im 1. Augenblick umständlich erscheinen, ist aber das Mittel der Wahl. |
Re: Weiterentwickelndes Object???
Also das ganze ist schon prinzipiell möglich.
Delphi-Quellcode:
type
Base = class procedure Convert; end; Derived = class(Base) procedure Message; end; {...} procedure Base.Convert; begin Self.Destroy; Self := Derived.Create; end; procedure Derived.Message; begin ShowMessage('Hat funktioniert.'); end; {...} var C: Base; begin C := Base.Create; C.Convert; if (C is Derived) then (C as Derived).Message; end; |
Re: Weiterentwickelndes Object???
Zitat:
Zitat:
Zitat:
Edit: Finde in dem Zusammenhang nur was mit Web-Diensten :?: :?: :?: Sonst noch wer Ideen :hi: Bye |
Re: Weiterentwickelndes Object???
Nach meiner Methode würde es gehen. Du musst halt bei jeder Verwendung abfragen, um welche Art von Objekt es sich handelt.
|
Re: Weiterentwickelndes Object???
Zitat:
|
Re: Weiterentwickelndes Object???
Möchtest du dein TTestyBase-Objekt schon mit Daten ein Properties bestücken oder dient es nur der Erzeugung eines von ihm abgeleiteten Objekts?
Ansonsten könntest du das ganze mit virtuellen Methoden machen...
Delphi-Quellcode:
interface
TTestyBase = class function SagWas: string; virtual; abstract; end; TTestyFloat = class(TTestyBase) function SagWas: string; end; TTestyInteger = class(TTestyBase); function SagWas: string; end; function CreateObject(ClassType :string): TTestyBase; {...} implementation function TTestyFloat.SagWas: string; begin Result := 'Ich bin ein TTestyFloat-Objekt'; end; function TTestyInteger.SagWas: string; begin Result := 'Ich bin ein TTestyInteger-Objekt'; end; function CreateObject(ClassType :string): TTestyBase; begin Result := nil; if ClassType = 'Integer' then begin Result := TTestyInteger.Create; Exit; end; if ClassType = 'Float' then begin Result := TTestyFloat.Create; Exit; end; end; {...} procedure Test; begin with CreateObject('Integer') do begin ShowMessage(SagWas); Free; end; with CreateObject('Float') do begin ShowMessage(SagWas); Free; end; end; |
Re: Weiterentwickelndes Object???
Zitat:
Eingelesen wird immer im selben verfahren, mit 2 Strings: TypString, InformationsString. Bis jetzt mach mit mach ich es mit Hilfe eines 2.ten Objects. Dies macht eine Fallunterscheidung (anhand des Typ-Strings) und Erstellet dementsprechend das Object, welches den zweiten String (InformationsString) zerlegt und daraus die Informationen bereitstellt... Abrufen tu ich die Informationen aber immer mit dem BasisObject mit den Abstrakten Virtuellen Methoden... Da die Erstellung nun aber zunehmend unübersichtlicher wird, wollte ich gleich die Erstellung der Objecte dem Object selber überlassen, auch deswegen, da ich an vielen stellen die Liste mit den BasisObjecten fülle und da immer ein Object zum Handeln zu erstellen is mir auf dauer zu blöd :angel2: Edit: Fast vergessen, dass BasisObject hat natürlich auch Propertys, die aber schon befüllt sind, auch müssen, weil sonst findet es die Strings auch nicht :zwinker: ... irgendwie total verworren, ich glaub ich konsilidiere das ganze mal... Bye |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:50 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-2025 by Thomas Breitkreuz