AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Kann ein Objekt seinen Namen ausgeben?

Ein Thema von delfie · begonnen am 23. Mär 2014 · letzter Beitrag vom 5. Apr 2014
Antwort Antwort
Seite 1 von 2  1 2   
delfie

Registriert seit: 14. Okt 2012
7 Beiträge
 
#1

Kann ein Objekt seinen Namen ausgeben?

  Alt 23. Mär 2014, 12:29
Delphi-Version: 6
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?

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
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.934 Beiträge
 
Delphi 12 Athens
 
#2

AW: Kann ein Objekt seinen Namen ausgeben?

  Alt 23. Mär 2014, 12:35
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;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
delfie

Registriert seit: 14. Okt 2012
7 Beiträge
 
#3

AW: Kann ein Objekt seinen Namen ausgeben?

  Alt 23. Mär 2014, 12:56
Herzlichen Dank. Das geht aber flott hier!

Das habe ich verstanden.
Wieder an etwas nicht gedacht

Wie kann ich denn dann auf die Adresse der Variablen zugreifen, wenn das ein Objekt ist?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.017 Beiträge
 
Delphi 12 Athens
 
#4

AW: Kann ein Objekt seinen Namen ausgeben?

  Alt 23. Mär 2014, 13:37
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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.934 Beiträge
 
Delphi 12 Athens
 
#5

AW: Kann ein Objekt seinen Namen ausgeben?

  Alt 23. Mär 2014, 13:51
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.288 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Kann ein Objekt seinen Namen ausgeben?

  Alt 23. Mär 2014, 14:33
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
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#7

AW: Kann ein Objekt seinen Namen ausgeben?

  Alt 23. Mär 2014, 14:43
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.
  Mit Zitat antworten Zitat
delfie

Registriert seit: 14. Okt 2012
7 Beiträge
 
#8

AW: Kann ein Objekt seinen Namen ausgeben?

  Alt 23. Mär 2014, 17:55
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.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.934 Beiträge
 
Delphi 12 Athens
 
#9

AW: Kann ein Objekt seinen Namen ausgeben?

  Alt 23. Mär 2014, 18:00
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.017 Beiträge
 
Delphi 12 Athens
 
#10

AW: Kann ein Objekt seinen Namen ausgeben?

  Alt 23. Mär 2014, 18:06
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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 16:38 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