AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Basisklassenroutine kann nicht auf vererbte Variablen zugreifen?
Thema durchsuchen
Ansicht
Themen-Optionen

Basisklassenroutine kann nicht auf vererbte Variablen zugreifen?

Ein Thema von hboy · begonnen am 6. Jun 2011 · letzter Beitrag vom 7. Jun 2011
 
hboy

Registriert seit: 16. Jan 2004
364 Beiträge
 
#3

AW: Basisklassenroutine kann nicht auf vererbte Variablen zugreifen?

  Alt 6. Jun 2011, 19:17
Danke Stevie. Die Variable ist im richtigen Code als private deklariert und wird nur als interner Zustand genutzt, der sich auf das event handling auswirkt, ich habe das nur sinngemäß der Darstellung wegen umgeschrieben, nachdem ich geprüft hatte, dass es sich bei public-Variablen ebenso verhält.

Um das Drumherum aufzuzeigen:

Delphi-Quellcode:
Type TUserInteractionHandler = class(TObject)
private
    ConnectionIsValid : Boolean;
public
    OnDisconnect : TNotifyEvent;
    property Connected: Boolean read IsConnected;

    procedure Connect( ... ); virtual;
    procedure Disconnect;

    procedure VectorObjectsChanged(Sender: TObject);
end;


Type TCreatePointHandler= class(TUserInteractionHandler)
    procedure Connect( ... ); override;
end;


procedure TCreatePointHandler.Connect( ... );
begin
   ...
   ConnectionIsValid := True;
   ...
end;

procedure TUserInteractionHandler .VectorObjectsChanged(Sender: TObject);
begin
  if ConnectionIsValid then
  begin
     ...
  end;
end;

VectorObjectsChanged wird vom Besitzer der Instanz ausgelöst, wobei die Instanz als TUserInteractionHandler angesprochen wird. In der Behandlung der Fallprüfung soll dann das Event OnDisconnect ausgelöst werden, jedoch ist auch diese Variable nil.

edit : Sorry, da ist etwas beim zusammenschneiden durcheinandergekommen.
edit 2 : ich habe es noch einmal zurückgebaut und beobachte tatsächlich das beschriebene Verhalten. Dabei scheint es unerheblich zu sein, ob die Methode in der Basisklasse nun als virtual, dynamic oder one Direktive klassifiziert ist. Der Debugger springt ab einem breakpoint davor auch in die Routine der Basisklasse, in der die Variable als "False" evaluiert wird. Andere Variablen, die im obigen Auszug nicht aufgelistet sind, werden ebenfalls als 0 oder nil evaluiert.
edit 3 : Delphiversion ist 10.0
Power is nothing without TControl

Geändert von hboy ( 6. Jun 2011 um 19:35 Uhr)
  Mit Zitat antworten Zitat
 


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 07:34 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