Einzelnen Beitrag anzeigen

MichaelT

Registriert seit: 14. Sep 2005
Ort: 4020 Linz
532 Beiträge
 
Delphi 10.3 Rio
 
#20

AW: AV innerhalb des if-Statements lässt sich nicht abfangen

  Alt 15. Jan 2018, 16:40
Der Sinn von einem Record und auch das revolutionäre der Verbundstrukturen war, dass man Informationen Gruppieren konnte und pro Instanz konnte gemeinsam verwalten. Ein Objekte als Instanz einer Klasse fällt in diese Kategorie. Vorher gab es nur ARRAYS von Basisdatentypen.

Aber du kannst nur auf Informationen bestehender Verbundstrukturen zugreifen und sonst sind die Objekte gleich und das wird ausgedrückt durch NULL/NIL.

Du sagst, 'Not In List'. Alternativ dazu wäre das NULL resp. Leere Objekt. In dem könnte man isAlive := False setzen.

Selbst wenn du eine Verbundstruktur schachtelst.

Delphi-Quellcode:

type TEnvelope = record
  // pointer to object
  reference : POINTER TO AbstractDataType // in Modula Slang
  isAlive : boolean;
end;
Kannst du dir noch immer nicht sicher sein, ob die Referenz noch lebt. Du könntest das zwar mit Klassen machen und sicherstellen, dass IsAlive private bleibt und nur ausglesen werden kann und unter Verantwortung der Klasse TEnvolope synchron mit der Erzeugung einer Objektinstanz gesetzt wird usw... Das Problem ob der Envelope initialisiert ist bleibt und damit ist nichts gewonnen.

Dann hast du nur Schnittstellen die TEnvelopes übergeben bekommen

Du kannst noch die Erzeugung der Objekte der Klasse überlassen und die Verwaltung ihrer Instanzen und indirekt zugreifen. Im Fall von NotAssigned käme ein leeres Objekt zurück. Damit würdest du die Abfrage mit Assigned netter gestalten, aber ändert nichts am langen Ende. Dadurch, dass die Klasse die Objekte selbst verwaltet verschwindet auch deine Verantwortung dieses Singelton freizugeben.

was ich meinte war:

var
objectAvail: boolean;

begin
objectAvail := False;
procedure initObject;
begin
...code der das object zur verfügung stellt und festgestellt wird obs initialisiert ist mit diesem ergebnis:
objectAvail:= True;
end;
procedure killObject;
begin
...code der das object freigibt mit diesem ergebnis:
objectAvail:= False;
end;

initObject;
IF-block start..
if objectAvail then ...code
endif;
end;

oder hab ich alles falsch verstanden?
  Mit Zitat antworten Zitat