![]() |
Überkreuz-Referenz zw. Klassen
Ich habe in 1 Unit (D7) die 2 folgenden Klassen deklariert:
Code:
Das funktioniert so nicht, da TDevice die Klasse TIPConnection noch nicht kennt. Wie könnte man das lösen, aber die beiden Refrenzen behält ?
type
TDevice = class public ipcon: TIPConnection; end; type TIPConnection = class public devices: Array [0..255] of TDevice; end; implementation |
AW: Überkreuz-Referenz zw. Klassen
Mit einer sogenannten Forward-Deklaration. Ich glaube jedenfalls, dass es so heißt:
Delphi-Quellcode:
HTH
type
TIPConnection = class; // <<------ TDevice = class public ipcon: TIPConnection; end; TIPConnection = class public devices: Array [0..255] of TDevice; end; implementation |
AW: Überkreuz-Referenz zw. Klassen
Zitat:
Und zu beachten ist, daß es sich nur um einen Type-Block handelt. Die Forward-Deklaration und die eigentliche Deklaration müssen Beide im selben Block stehen. (und demnach auch innerhalb der selben Unit) |
AW: Überkreuz-Referenz zw. Klassen
Danke, habs sofort umgesetzt und klappt prima.
Letzte Frage: Wie deklariere ich Konstanten, die z.B. nur für die Klasse TDevice gültig sein sollen ? |
AW: Überkreuz-Referenz zw. Klassen
Direkt nicht. Du kannst diese aber mit entsprechenden Prefixen versehen
|
AW: Überkreuz-Referenz zw. Klassen
Ab Delphi 2006 / Turbo Delphi, kann man Typen und Constanten innerhalb einer Klasse definieren.
Delphi-Quellcode:
Wegen der Übersichtlichkeit lege ich mir dafür aber jeweils eigene Sichtbarkeitsbereiche an
type
TMyClass = class const X = 3; type T = Byte; end;
Delphi-Quellcode:
Intern als X nutzbar und extern als TMyClass.X (aber nur weil von außen sichbar, da Public)
type
TMyClass = class strict private const A = 'ganz geheim und nur für TMyClass'; private const Z = 'abc'; public const X = 666; Y = -7; private type TGeheim = record i: Integer; s: string; end; public constructor Create; end; |
AW: Überkreuz-Referenz zw. Klassen
Bei gegenseitig referenzierenden Klassen sollte man versuchen den Konflikt durch Einführung einer weiteren Klasse aufzulösen:
Delphi-Quellcode:
type
TIPConnection = class public property IP:TInAddr; property Port:Word; end; TDevice = class public ipcon: TIPConnection; end; TIPConnectionPool = class(TIPConnection) public devices: Array [0..255] of TDevice; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:06 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 by Thomas Breitkreuz