Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zur Sichtbarkeit von TYPEN (https://www.delphipraxis.net/135541-zur-sichtbarkeit-von-typen.html)

GueAck 12. Jun 2009 21:17


Zur Sichtbarkeit von TYPEN
 
Hallo,

ich habe immer wieder folgende Unsauberkeit, die ich verbessern möchte:

In einer Unit habe ich:
------------------------------
Delphi-Quellcode:
INTERFACE

TYPE
t_xy =....

t_sichtbare_Klasse = CLASS
....
PRIVATE
xy:t_xy;
END;

IMPLEMENTATION
...
------------------------------
Der TYPE t_xy ist nach außen sichtbar, obwohl er eigentlich nur lokal gebraucht wird. Das ist gelegentlich lästig, weil man ja z. B. in einer Unit "UPKW" mit der Klasse "t_PKW" sowie in einer UNIT "ULKW" mit einer Klasse "t_LKW" jeweils einen TYPE "t_Motoreigenschaften" hat, was dann bei gemeinsamer Nutzung ein Problem gibt.

Hat da jemand eine Idee, wie man das richtig macht?

Gruß Guenther

[edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit]

Apollonius 12. Jun 2009 21:21

Re: Zur Sichtbarkeit von TYPEN
 
Wenn der Typ im Interface nicht gebraucht wird, kannst du die Deklaration nach Implementation verschieben. Wenn er beispielsweise im private-Teil öffentlicher Klassen benötigt wird, kannst du zumindest in neueren Delphi-Versionen den Typen in der öffentlichen Klasse als private deklarieren.

mkinzler 12. Jun 2009 21:22

Re: Zur Sichtbarkeit von TYPEN
 
Nicht im Interface, sondern unter Implementation deklarieren, dann ist er nur lokal sichtbar

Meflin 12. Jun 2009 21:24

Re: Zur Sichtbarkeit von TYPEN
 
Zitat:

Zitat von mkinzler
Nicht im Interface, sondern unter Implementation deklarieren, dann ist er nur lokal sichtbar

Dann kann ers in de rKlasse aber auch nicht verwenden...

himitsu 12. Jun 2009 21:45

Re: Zur Sichtbarkeit von TYPEN
 
ab mindestens TurboDelphi/Delphi2006 geht sowas
Delphi-Quellcode:
t_sichtbare_Klasse = CLASS
....
PRIVATE
TYPE
  t_xy =....
VAR
  xy:t_xy;
END;
oder
Delphi-Quellcode:
t_sichtbare_Klasse = CLASS
....
PRIVATE
TYPE t_xy =....
PRIVATE
xy:t_xy;
END;
oder du definierst es in einer anderen Unit ... solange diese Unit nirgendwo anders eingebunden ist, ist es auch nirgends außerhalb sichtbar.

PS: das geht alles übrigend auch mit Konstanten :angel:

sx2008 12. Jun 2009 21:59

Re: Zur Sichtbarkeit von TYPEN
 
Du kannst auch ein "richtiges" Interface deklarieren:
Delphi-Quellcode:
interface

IContact = Interface(IUnknown)
  function GetPhoneNo:WideString;
  ...
end;

function CreateNewContact:IContact;

implementation
 
type

TContact = class(TComObject, IContact)
  function GetPhoneNo:WideString;
end;
Damit lassen sich alle Implementationsdetails komplett verbergen.

GueAck 14. Jun 2009 22:37

DANKE:....
 
Viele hilfreiche Ideen, danke an alle, probiere ich alles aus!
Gruß Guenther


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz