![]() |
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 |
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; |
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? |
AW: Kann ein Objekt seinen Namen ausgeben?
Ja, ein "Objekt" (z.B. TComponent) hat Zugriff auf seinen Namen.
![]() 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) |
AW: Kann ein Objekt seinen Namen ausgeben?
Zitat:
|
AW: Kann ein Objekt seinen Namen ausgeben?
Zitat:
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 |
AW: Kann ein Objekt seinen Namen ausgeben?
Ich weiß zwar auch nicht was du damit willst, aber zur Not:
Delphi-Quellcode:
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.
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; |
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. |
AW: Kann ein Objekt seinen Namen ausgeben?
Zitat:
|
AW: Kann ein Objekt seinen Namen ausgeben?
Zitat:
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 21:08 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