Forum: Programmieren allgemein
by hboy,
7. Jun 2011
gut möglich, dass ich gestern abend beim debuggen unterschiedliche Instanzen beim breakpoint in der Basisklassenmoethode gesehen habe, das würde die unterschiedlichen Adressen erklären - jedoch kann das, wie ich es überblicke, auch nicht erklären, wieso es nicht unerheblich ist, ob die Methode in der Basisklasse abstrakt oder explizit angelegt ist.
Forum: Programmieren allgemein
by hboy,
6. Jun 2011
Ich rufe VectorObjectsChanged auf, um der Handlerinstanz mitzuteilen, dass sich etwas an der Datenstruktur geändert hat, etwa wenn Objekte gelöscht oder hinzugefügt wurden, während der Handler verbunden ist.
Dann wird geprüft, ob nach dem letzten Kenntnisstand noch alles funktioniert hat (ConnectionIsValid)
Wenn das Objekt gelöscht wurde, auf das aktuell zugegriffen wird (dann kann die...
Forum: Programmieren allgemein
by hboy,
6. Jun 2011
Ok, nehmen wir vielleicht einen Schritt Abstand, von außen sehen beide Implementierungen gleich aus,
Type TUserInteractionHandler = class(TObject)
private
obj: TObject;
ConnectionIsValid : Boolean;
IsConnected : Boolean;
public
OnDisconnect : TNotifyEvent;
procedure Disconnect;
Forum: Programmieren allgemein
by hboy,
6. Jun 2011
Ich habe jetzt auf die Schnelle einen Objektzeiger und eine Boolean-Variable bei besagter Basisklassenmethode und bei einer Methode einer abgeleiteten Klasse ausgeben lassen und das beruhigt mich nun irgendwie nicht.
022A5294 False (Basisklasse)
022A524C True (abgeleitete Klasse)
Es ist etwas schwer, ein Beispielschnipselchen zu schreiben, das realitätsgetreu ist, da die Methode nach dem...
Forum: Programmieren allgemein
by hboy,
6. Jun 2011
ich habe eben das hier implementiert:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
type TBaseClass = class
private
Forum: Programmieren allgemein
by hboy,
6. Jun 2011
Das Zuweisen geschieht bereits beim Erzeugen der Instanz. Ungeachtet der Zuweisung, die auch beim Aufruf von Connect() erfolgen könnte, sehen andere Methode das Event als korrekt zugewiesen, nur beim Sprung in die Methode der Basisklasse wird sie als nil aufgelöst.
Forum: Programmieren allgemein
by hboy,
6. Jun 2011
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:
Type TUserInteractionHandler = class(TObject)
private
...
Forum: Programmieren allgemein
by hboy,
6. Jun 2011
Hallo,
entschuldigt die blöde Frage, aber mir scheint hier wirklich etwas grundlegendes entgangen zu sein:
Ausgehend von einer Basisklasse wird an eine weitere Klasse vererbt.
type TBasisKlasse = class
public
Variable: Boolean;
function TestVariable: Boolean; virtual;
end;