![]() |
Instanzen einer Klasse
Hallo zusammen,
gibt es eine Möglichkeit herauszufinden, welche Instanz meine Klasse aufgerufen hat? Danke |
Re: Instanzen einer Klasse
Was genau meinst Du :gruebel:
...:cat:... |
Re: Instanzen einer Klasse
Folgendes:
Delphi-Quellcode:
Dieses Beispiel vereinfacht mein Problem sehr stark. Es stellt nur halt nur ein anschauliches Bespiel dar.
TMyBeispiel = class
bespielString : String; bespielIntetger: Integer; function rechnen (beispielInteger:Integer): Integer; end; var test1, test2 : TMyBeispiel; procedure TFrmMain.FormCreate(Sender: TObject); begin test1:= TMYBeispiel.create; test2:= TMyBeispiel.create; end; //Diese Function, soll je nachdem von welcher Instanz sie aufgerufen wurde mit 2 oder 3 multiplizieren function TMyBeispiel.rechnen(beispielInteger:Integer): Integer; begin //wenn von Instanz test1 aufgerufen dann multpliziere mit 2 //sonst wenn von instanz test2 aufgerufen mit 3 end; Zusammengefasst möchte ich gerne wissen, ob ich irgendwie aus den RTTI den Namen der aufrufenden Instanz auslesen kann. Ansonsten würde mir nur einfallen der KLasse ein Attribut "Name" hinzuzufügen, und dieses über den constructor zu mit dem Namen der jeweiligen Instanz zu füllen. |
Re: Instanzen einer Klasse
Hallo,
ist mir nichts bekannt. Aus dem Grund wird auch bei den Komponenten der VCL immer Owner und Parent mitgeführt. Viele Grüße |
Re: Instanzen einer Klasse
die funktion rechnen wie folgt abändern
function rechnen (Sender:TMyBeispiel; beispielInteger:Integer): Integer; und dann halt in der funktion fragen ob Sender = test1 oder test2 ist |
Re: Instanzen einer Klasse
Schon mal herzlichen Dank für die Antwort, aber eines ist mir noch nicht ganz klar, muss ich von einer bestimmten Klasse TObject oder TComponent ableiten, damit ich Sender benutzen kann? Oder wie initialisiere ich Sender?
|
Re: Instanzen einer Klasse
Moin MickMack,
leite einfach von TObject ab, und führe selber eine Eigenschaft Name ein, die Du im Konstruktor mit angibst. Selbst dynamisch erzeugte Komponenten (von TComponent abgeleitet) erhalten nicht automatisch einen Namen. Den muss man selber angeben (und verwalten um doppelte zu verhindern). Um Dir die Verwaltung zu vereinfachen könntest Du noch eine weitere Klasse erstellen, die dann eine Liste der Objekte der eigentlichen Klasse enthält, und für eine Korrekte Namensvergabe zuständig ist. Die könnte dann die Eigenschaft Name auf 'NeuerName'+IntToStr(LaufendeNummer) setzen. Um die Abfrage zu erleichtern (vor allem aber schneller zu machen) könntest Du natürlich auch gleich, statt des Namens, ein numerisches Feld für die Unterscheidung vorsehen. Für den zweiten Fall mal ein kleines Beispiel:
Delphi-Quellcode:
type
TTestSub = class(TObject) private FiInstance : integer; public function rechnen (beispielInteger:Integer): Integer; property Instance : integer read FiInstance write FiInstance; end; TTestMain = class(TObject) private FList : TList; public constructor Create; destructor Destroy; override; function Add : TTestSub; end; implementation {$R *.DFM} function TTestMain.Add : TTestSub; begin Result := TTestSub.Create; FList.Add(Result); Result.Instance := FList.Count; end; constructor TTestMain.Create; begin inherited; FList := TList.Create; end; destructor TTestMain.Destroy; var i : integer; begin for i := 0 to FList.Count-1 do begin TTestSub(FList.Items[i]).Free; end; FreeAndNil(FList); inherited; end; function TTestSub.rechnen(beispielInteger: Integer): Integer; begin Result := self.Instance*beispielInteger; end; procedure TForm1.Button1Click(Sender: TObject); var tm : TTestMain; tc1 : TTestSub; tc2 : TTestSub; begin tm := TTestMain.Create; try tc1 := tm.Add; tc2 := tm.Add; ShowMessage(IntToStr(tc1.Rechnen(3))); ShowMessage(IntToStr(tc2.Rechnen(3))); finally FreeAndNil(tm); end; end; |
Re: Instanzen einer Klasse
wofür einen Namen?? man kann doch auch "if Sender = test1" abfragen und nicht nur "if sender.name = 'test1'"
und der aufruf der funktion muss duruch die componente oder was es ist selbst erfolten und bei Sender halt "self" (für den fall von Tcomponent) einsetzen... naja, du wirst das schon hinn bekommen. |
Re: Instanzen einer Klasse
Hi,
schonmal folgendes versucht (innerhalb der Methode)?
Delphi-Quellcode:
.. nur so'ne Idee ....
if self = test1 then ... // *2
if self = test2 then ... // *3 |
Re: Instanzen einer Klasse
:warn: Was über globale Variablen und ihre gefahr. :warn:
![]() Leide doch die Klasse ab oder lege den Wert als Parameter fest. Aber Programmiert nicht so eine sch**** ( :kotz: ) wie... Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:59 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