Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Auf private-Variable aus abgeleiteter Klasse zugreifen (https://www.delphipraxis.net/95735-auf-private-variable-aus-abgeleiteter-klasse-zugreifen.html)

sirius 12. Jul 2007 09:54


Auf private-Variable aus abgeleiteter Klasse zugreifen
 
Kann man auf diese private xyz Variable irgendwie aus T2 zugreifen?
Delphi-Quellcode:
unit unit1

type T1=class
       private
         xyz:integer;
end;

//...
unit unit2

uses unit1;

type T2=class(T1)
       //...

      property a:integer read yxz;
end;
Oder einfach nur generell auf xyz zugreifen wenn ich Methoden in T2 implementiere.

Warum? Ich würde gern FWindowHandle aus TTimer wissen.

Bernhard Geyer 12. Jul 2007 09:56

Re: Auf private-Variable aus abgeleiteter Klasse zugreifen
 
Nein. Private Variablen sind nur für abgeleitete Klassen sichtbar wenn diese in der gleichen Unit liegen!

sirius 12. Jul 2007 09:58

Re: Auf private-Variable aus abgeleiteter Klasse zugreifen
 
Zitat:

Zitat von Bernhard Geyer
Nein. Private Variablen sind nur für abgeleitete Klassen sichtbar wenn diese in der gleichen Unit liegen!

Danke! Hab ich mir fast gedacht. Ich hatte noch die Hoffnung, dass ich etwas übersehen habe.
Ich habe jetzt den Source von TTimer in meine Unit kopiert.
Wieso haben die mir bloß verboten auf FwindowHandle zuzugreifen :gruebel:?

SirThornberry 12. Jul 2007 10:09

Re: Auf private-Variable aus abgeleiteter Klasse zugreifen
 
weil dich das Handle gar nicht interessieren sollte bei dem Timer. Denn der Timer stellt als Funktionalität das wiederholte Aufrufen einer Callback-Methode bereit. Und wenn du diese Funktionalität erweitern willst sollte es nicht nötig sein das Handle zu erfahren.

Elvis 12. Jul 2007 10:12

Re: Auf private-Variable aus abgeleiteter Klasse zugreifen
 
Es gibt viele böse Wege um zu erreichen was du willst, und alle vertrauen darauf, dass Delphi nicht type safe ist...
Eine Pseudoklasse, mit den gleichen Feldern mindestens bis zum gewünschten FWindowHandle:
Delphi-Quellcode:
type
  TPseudoTimer = class(TComponent)
  public
    FInterval: Cardinal;
    FWindowHandle: HWND;
  end;

var
  windowHandle : HWND;
begin
  windowHandle := TPseudoTimer(deinTimer).FWindowHandle;
end;
Oder du weißt den Fieldoffset von FWindowHandle (bei D7 ist das 52):
Delphi-Quellcode:
windowHandle := HWND(Pointer(Integer(deinTimer) + 52)^)
Wem jetzt nicht markant übel wird, sollte sich dringend überlegen, ob er etwas als Programmierer taugt. :mrgreen:

SirThornberry 12. Jul 2007 10:15

Re: Auf private-Variable aus abgeleiteter Klasse zugreifen
 
@Elvis: Ein guter Ansatz aber bitte nicht zu Integer casten sondern Cardinal. Ansonsten kannst du pech haben und dein cast zu signed schlägt ins Negative womit dann überhaupt nix stimmt.

Elvis 12. Jul 2007 10:20

Re: Auf private-Variable aus abgeleiteter Klasse zugreifen
 
Zitat:

Zitat von SirThornberry
@Elvis: Ein guter Ansatz aber bitte nicht zu Integer casten sondern Cardinal. Ansonsten kannst du pech haben und dein cast zu signed schlägt ins Negative womit dann überhaupt nix stimmt.

Ups, jo das ist natürlich wahr. "Pointer" ist ja kein Integer, sondern ein Cardinal. Bin ja auch eigentlich ein verweichlichter .Net-Dev und kein nativer Bitschubser. :mrgreen:

sirius 12. Jul 2007 10:32

Re: Auf private-Variable aus abgeleiteter Klasse zugreifen
 
@sir
Mich hat es letzenendes gar nicht in der abgeleiteten Klasse interessiert sondern in dem Modul/Klasse in der ich TTimer verwende.
Da das ganze in einem eigenen Thread ist, musste ich für den Timer eine kleine ProcessMessages-Methode schreiben.
Und dabei wandele ich lieber auf sicherem Pfad und picke mir nur die Messages an meinem Timer aus der Message-Queue.

@elvis
Ja, der ist nicht schlecht. :mrgreen: Aber copy&paste hats auch gemacht. Und da konnte ich gleich die ExtCtrls rausschmeissen und noch ein paar kleine Änderungen direkt in der Klasse vornehmen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:49 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