Einzelnen Beitrag anzeigen

hboy

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

AW: Basisklassenroutine kann nicht auf vererbte Variablen zugreifen?

  Alt 6. Jun 2011, 20: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 20:35 Uhr)
  Mit Zitat antworten Zitat