Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Kann ein Objekt seinen Namen ausgeben? (https://www.delphipraxis.net/179661-kann-ein-objekt-seinen-namen-ausgeben.html)

delfie 23. Mär 2014 11:29

Delphi-Version: 6

Kann ein Objekt seinen Namen ausgeben?
 
Hallo Gurus,

Ich versuche gerade, mir OOP mit Delphi beizubringen. Daher finden meine Gehversuche zunächst einmal im Rahmen von Konsolen-Anwendungen statt. Ich habe hier im Forum schon vieles zum Titel-Thema gelesen. Nun stellt sich mir die Frage:

Kann es tatsächlich sein, dass ein Objekt keinen Zugriff auf seinen Namen hat? :shock:

Ich reserviere ja im Bereich "var" unter einem Variablen-Namen den Speicherplatz.
Ich lasse dann durch den Konstruktor "create" die Objekt-Instanz erstellen.

Und dann würde ich gern das Objekt seinen Namen ausgeben lassen - quasi zur Bestätigung.

Dass ich auf den Klassen-Namen zugreifen kann, ist mir bekannt.

Herzliche Grüße

Delfie

Uwe Raabe 23. Mär 2014 11:35

AW: Kann ein Objekt seinen Namen ausgeben?
 
Das ist so generell nicht möglich. Da eine Objekt-Instanz in mehreren Variablen gespeichert werden kann, wäre das auch nicht eindeutig.

Delphi-Quellcode:
var
  a: TObject;
  b: TObject;
begin
  a := TObject.Create;
  b := a;
end;

delfie 23. Mär 2014 11:56

AW: Kann ein Objekt seinen Namen ausgeben?
 
Herzlichen Dank. Das geht aber flott hier!

Das habe ich verstanden.
Wieder an etwas nicht gedacht :oops:

Wie kann ich denn dann auf die Adresse der Variablen zugreifen, wenn das ein Objekt ist?

himitsu 23. Mär 2014 12:37

AW: Kann ein Objekt seinen Namen ausgeben?
 
Ja, ein "Objekt" (z.B. TComponent) hat Zugriff auf seinen Namen.
Delphi-Referenz durchsuchenTComponent.Name

Es gibt aber keine Möglichkeit den Namen der Variable rauszubekommen,
abgesehn davon, daß der Name nicht in der EXE gespeichert ist, da er für das Programm vollkommen unrelevant ist.

Namen von Variablen sind quasi nur ein "Alias" für den Programmierer und später macht der Compiler daraus eine Speicheradresse.
Und nein, ein Objekt hat auch keinen Zugriff auf die Adresse der Variable. (wäre auch nutzlos, siehe die Anzwort von Uwe Raabe)

Uwe Raabe 23. Mär 2014 12:51

AW: Kann ein Objekt seinen Namen ausgeben?
 
Zitat:

Zitat von delfie (Beitrag 1253098)
Wie kann ich denn dann auf die Adresse der Variablen zugreifen, wenn das ein Objekt ist?

Vielleicht beschreibst du besser mal, was du genau vorhast.

jaenicke 23. Mär 2014 13:33

AW: Kann ein Objekt seinen Namen ausgeben?
 
Zitat:

Zitat von delfie (Beitrag 1253098)
Wie kann ich denn dann auf die Adresse der Variablen zugreifen, wenn das ein Objekt ist?

Die Adresse der Variablen, in denen der Zeiger auf das Objekt gespeichert ist? Ohne das selbst zu implementieren geht das nicht sinnvoll.

Die Adresse des Objektes selbst?
Delphi-Quellcode:
IntToHex(NativeUInt(Self), SizeOf(NativeUInt) * 2)
// so erhältst du einen String mit der hexadezimalen Repräsentation des Objektes, in dem du diesen Quelltext aufrufst

Popov 23. Mär 2014 13:43

AW: Kann ein Objekt seinen Namen ausgeben?
 
Ich weiß zwar auch nicht was du damit willst, aber zur Not:

Delphi-Quellcode:
type
  TBitmap = class(Graphics.TBitmap)
  private
    FVarName: String;
  public
    property VarName: String read FVarName write FVarName;
  end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Bmp: TBitmap;
begin
  Bmp := TBitmap.Create;
  try
    Bmp.VarName := 'Bmp';
    ShowMessage(Bmp.VarName);
  finally
    Bmp.Free;
  end;
end;
Beispiel ist eher als Scherz gemeint, aber es wäre interessant zu wissen wozu du es benötigst, dann könnte man evt. eine Lösung anbieten.

delfie 23. Mär 2014 16:55

AW: Kann ein Objekt seinen Namen ausgeben?
 
Zunächst herzlichen Dank für die überraschend schnellen Antworten.

Der Hintergrund für meine Versuche ist, dass ich einem Bekannten, der noch weniger über Objekte Bescheid weiß als ich, anschaulich machen wollte, was es heißt, ein Objekt anzulegen verglichen mit einer Variablen bei der prozeduralen Programmierung.

Aber da war ich wohl zu früh dran und muss mich erst selbst viel mehr damit auseinandersetzen.

Die zweite Idee, nämlich die Speicheradresse des Objekts auszugeben, kam dann daher, dass ich der Meinung war, dass die Objekt-Variable eigentlich ein Zeiger ist. Und der müsste dann ja auf eine Speicherstelle zeigen, an der die Daten des Objekts "beginnen".

So war jedenfalls mein gedankliches Bild.

Uwe Raabe 23. Mär 2014 17:00

AW: Kann ein Objekt seinen Namen ausgeben?
 
Zitat:

Zitat von delfie (Beitrag 1253129)
Die zweite Idee, nämlich die Speicheradresse des Objekts auszugeben, kam dann daher, dass ich der Meinung war, dass die Objekt-Variable eigentlich ein Zeiger ist. Und der müsste dann ja auf eine Speicherstelle zeigen, an der die Daten des Objekts "beginnen".

Genauso ist es auch.

himitsu 23. Mär 2014 17:06

AW: Kann ein Objekt seinen Namen ausgeben?
 
Zitat:

Zitat von delfie (Beitrag 1253129)
Die zweite Idee, nämlich die Speicheradresse des Objekts auszugeben, kam dann daher, dass ich der Meinung war, dass die Objekt-Variable eigentlich ein Zeiger ist. Und der müsste dann ja auf eine Speicherstelle zeigen, an der die Daten des Objekts "beginnen".

Das ist auch fast so.
In der Variable versteckt sich ein Zeiger, welcher auf den "eigentlichen" Objektspeicher zeigt,
welchen man sich wie einen Record vorstellen kann, wo ein Zeiger auf seinen Typ und auf die eigenen Variablen Felder enthalten sind.

Nur daß man hier den Zeiger nicht manuell dereferenzieren muß, weil das automatisch geschieht.


Man kann das mit den Arrays vergleichen.
- statische Arrays sind wie Records
- und dynamische Arrays wie Zeiger auf Records (also wie Objekte)


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:50 Uhr.
Seite 1 von 2  1 2      

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