AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Sichtbarkeit von Typen (z.B. Klassen) aus der Unit heraus

Sichtbarkeit von Typen (z.B. Klassen) aus der Unit heraus

Ein Thema von Der schöne Günther · begonnen am 8. Apr 2013 · letzter Beitrag vom 8. Apr 2013
Antwort Antwort
Der schöne Günther

Registriert seit: 6. Mär 2013
5.888 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Sichtbarkeit von Typen (z.B. Klassen) aus der Unit heraus

  Alt 8. Apr 2013, 12:35
Delphi-Version: XE2
Ja, das sind Fragen die man besser nicht in der Öffentlichkeit stellt. Aber hier sind wir ja ... unter uns


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 interface -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".

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 private oder protected inneren Klasse zu machen. Aber das ist hässlich.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Sichtbarkeit von Typen (z.B. Klassen) aus der Unit heraus

  Alt 8. Apr 2013, 12:42
Deklariere die Klasse im implementation Teil

Klingt einfach, ist es auch
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
5.888 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Sichtbarkeit von Typen (z.B. Klassen) aus der Unit heraus

  Alt 8. Apr 2013, 12:49
Das macht Sinn, vielen Dank

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:
interface
type

    wichtigeKlasse = class
      private privateReferenz: unwichtigeKlasse; // Kennt er nicht
      [...]
   end;

implementation
[...]
type unwichtigeKlasse = class
[...]
end;
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...

Geändert von Der schöne Günther ( 8. Apr 2013 um 12:54 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Sichtbarkeit von Typen (z.B. Klassen) aus der Unit heraus

  Alt 8. Apr 2013, 12:52
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.
Wenn du aber die Klasse A testen möchtest, dann brauchst du auch Zugriff auf sie.
Diese Klasse für [De]kodierung ist prädistiniert dafür, dass man sie testet.
Delphi-Quellcode:
// 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');
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.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
5.888 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Sichtbarkeit von Typen (z.B. Klassen) aus der Unit heraus

  Alt 8. Apr 2013, 12:58
Wie man sieht ist es gar nicht so schlimm
Das glaube ich auch langsam, es gibt sicher schlimmeres
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.390 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Sichtbarkeit von Typen (z.B. Klassen) aus der Unit heraus

  Alt 8. Apr 2013, 13:42
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
5.888 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Sichtbarkeit von Typen (z.B. Klassen) aus der Unit heraus

  Alt 8. Apr 2013, 13:50
Gute Idee. In dem Fall wäre das wirklich denkbar.

Geändert von Der schöne Günther ( 9. Apr 2013 um 09:32 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf