AGB  ·  Datenschutz  ·  Impressum  







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

Instanzen einer Klasse

Ein Thema von mickmack · begonnen am 7. Okt 2003 · letzter Beitrag vom 7. Okt 2003
Antwort Antwort
Seite 1 von 2  1 2      
mickmack

Registriert seit: 24. Sep 2003
Ort: Hamburg
51 Beiträge
 
#1

Instanzen einer Klasse

  Alt 7. Okt 2003, 13:02
Hallo zusammen,

gibt es eine Möglichkeit herauszufinden, welche Instanz meine Klasse aufgerufen hat?

Danke
Tu es oft - Bald bist du zu alt.
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

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

Re: Instanzen einer Klasse

  Alt 7. Okt 2003, 13:03
Was genau meinst Du

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
mickmack

Registriert seit: 24. Sep 2003
Ort: Hamburg
51 Beiträge
 
#3

Re: Instanzen einer Klasse

  Alt 7. Okt 2003, 14:35
Folgendes:
Delphi-Quellcode:
  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;
Dieses Beispiel vereinfacht mein Problem sehr stark. Es stellt nur halt nur ein anschauliches Bespiel dar.

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.
Tu es oft - Bald bist du zu alt.
  Mit Zitat antworten Zitat
Delphianer

Registriert seit: 19. Feb 2003
Ort: Rossau
149 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

Re: Instanzen einer Klasse

  Alt 7. Okt 2003, 14:40
Hallo,

ist mir nichts bekannt. Aus dem Grund wird auch bei den Komponenten der VCL immer Owner und Parent mitgeführt.

Viele Grüße
Lutz
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Instanzen einer Klasse

  Alt 7. Okt 2003, 14:41
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
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
mickmack

Registriert seit: 24. Sep 2003
Ort: Hamburg
51 Beiträge
 
#6

Re: Instanzen einer Klasse

  Alt 7. Okt 2003, 15:49
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?
Tu es oft - Bald bist du zu alt.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Instanzen einer Klasse

  Alt 7. Okt 2003, 16:32
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;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Instanzen einer Klasse

  Alt 7. Okt 2003, 17:26
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Honie

Registriert seit: 27. Sep 2003
Ort: Bielefeld
39 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Instanzen einer Klasse

  Alt 7. Okt 2003, 18:49
Hi,

schonmal folgendes versucht (innerhalb der Methode)?


Delphi-Quellcode:
if self = test1 then ... // *2
if self = test2 then ... // *3
.. nur so'ne Idee ....
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#10

Re: Instanzen einer Klasse

  Alt 7. Okt 2003, 19:11
Was über globale Variablen und ihre gefahr.

http://www.delphipraxis.net/internal...ct.php?t=10064

Leide doch die Klasse ab oder lege den Wert als Parameter fest.
Aber Programmiert nicht so eine sch**** ( ) wie...
Zitat von Honie:
Delphi-Quellcode:
if self = test1 then ... // *2
if self = test2 then ... // *3
Das hat nix mit guten P-Stil zu tun.
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 01:43 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