![]() |
Delphi-Version: XE2
Sichtbarkeit von Typen (z.B. Klassen) aus der Unit heraus
Ja, das sind Fragen die man besser nicht in der Öffentlichkeit stellt. Aber hier sind wir ja ... unter uns 8-)
Delphi hat mich schon mehrmals mit seiner Interpretation von Sichtbarkeitsmodifikatoren verwundert. Jetzt frage ich mich, wie ich eigentlich verhindern kann, eine Klasse aus einer Unit nach außen zu führen. Die Deklaration der Klasse steht ja direkt im
Delphi-Quellcode:
-Teil der Unit. Mir fällt nichts ein, wo ich da noch sagen könnte: "Diese Klasse soll in dieser Unit sichtbar sein, wer aber von außen kommt und diese Unit einbindet - Den geht das nichts an".
interface
Konkretes Beispiel wäre einfach nur eine Klasse A, die ein paar unterstützende Methoden (beispielsweise [De]kodierung) für Klasse B anbietet. Wenn man die Unit einbindet, interessiert einen nur Klasse B. Mir fällt nur ein, Klasse B zu einer
Delphi-Quellcode:
oder
private
Delphi-Quellcode:
inneren Klasse zu machen. Aber das ist hässlich.
protected
|
AW: Sichtbarkeit von Typen (z.B. Klassen) aus der Unit heraus
Deklariere die Klasse im implementation Teil ;)
Klingt einfach, ist es auch :mrgreen: |
AW: Sichtbarkeit von Typen (z.B. Klassen) aus der Unit heraus
Das macht Sinn, vielen Dank :thumb:
Aber: Gewünscht hätte ich mir, natürlich auch eine private Referenz als Member in der Klasse halten zu können (von außen sieht die ja eh niemand), siehe Beispiel:
Delphi-Quellcode:
In Methoden kann ich dann meine unwichtigeKlasse verwenden, aber wenn ich über die Aufrufe hinweg die Referenz behalten will muss sie wohl im interface-Teil deklariert werden und ist somit überall sichtbar...
interface
type wichtigeKlasse = class private privateReferenz: unwichtigeKlasse; // Kennt er nicht [...] end; implementation [...] type unwichtigeKlasse = class [...] end; |
AW: Sichtbarkeit von Typen (z.B. Klassen) aus der Unit heraus
Zitat:
Diese Klasse für [De]kodierung ist prädistiniert dafür, dass man sie testet.
Delphi-Quellcode:
Wie man sieht ist es gar nicht so schlimm, dass man in Delphi nicht gezielt Klassen verstecken kann weil man die Klassen sowieso testen muss.
// Test (ohne Testframework)
const TESTDATA = 'teststring123äöüß'; var a : TKlasseA; s : String; begin a := TKlasseA.Create; s := a.Encode(TESTDATA); s := a.Decode(s); if s <> TESTDATA then raise Exception.Create('Test TKlasseA fehlgeschlagen'); |
AW: Sichtbarkeit von Typen (z.B. Klassen) aus der Unit heraus
Zitat:
|
AW: Sichtbarkeit von Typen (z.B. Klassen) aus der Unit heraus
Mit ein wenig Aufwand (Typecasting) geht aber auch das Angestrebte:
Delphi-Quellcode:
interface
type wichtigeKlasse = class private privateReferenz: TObject; //oder die Basisklasse von unwichtigeKlasse [...] end; implementation [...] type unwichtigeKlasse = class [...] end; procedure wichtigeKlasse.MachWas; var uk: unwichtigeKlasse; begin uk := privateReferenz as unwichtigeKlasse; ... end; |
AW: Sichtbarkeit von Typen (z.B. Klassen) aus der Unit heraus
Gute Idee. In dem Fall wäre das wirklich denkbar. :thumb:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:46 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