![]() |
Versteckte Klasse entwickeln.
Hallo,
gibt es in Delphi die Möglichkeit eine ganze Klasse zu verbergen? Ich habe davon gehört, dass man einzelne Methoden verbergen kann. Folgende Situation möchte ich damit ausschließen. Ich hab eine Klasse TKörper die nicht sichtbar sein soll.(Nur die Klassen, die von TKörper erben dürfen alles sehen.) Dann habe ich eine Klasse TWürfel und TQuader. Diese sollen sichtbar sein. Ich möchte einfach verhindern, dass jemand von der falschen Klasse ein Object erzeugt und dann damit arbeitet. Wenn dies möglich wäre, könnte ich mit eine menge arbeit spaaren. MfG Christian18 |
Re: Versteckte Klasse entwickeln.
Guten Abend,
kann man denn keine ganze Klasse abstract deklarieren? Grüße Klaus |
Re: Versteckte Klasse entwickeln.
Doch, kann man:
![]() |
Re: Versteckte Klasse entwickeln.
Aber warum sollte ien abtrakte Klasse versteckt sein?
|
Re: Versteckte Klasse entwickeln.
Ich hab das so verstanden, dass diese Klasse nicht zu instanzieren sein soll. Dafür muss man sie ja nicht verstecken.
|
Re: Versteckte Klasse entwickeln.
Mich irritiert das "versteckt". Eine abstrake Klasse ist ja nicht versteckt, genauso wenig wie abstrakte Methoden versteckt sind.
|
Re: Versteckte Klasse entwickeln.
Hi,
Ich denke er will Klasse so verstecken wie man Attribute und Methoden mittels "private" bzw "protected" verstecken kann. Das geht soweit ich weiß allerdings nicht in Delphi. Gruß Neutral General |
Re: Versteckte Klasse entwickeln.
Hallo,
naja der nutzer der klasse soll eigentlich gar nicht wissen, dass es diese klasse gibt. sicherlich könnte er in der unit nachschauen und würde sie dann sehen. lf chris |
Re: Versteckte Klasse entwickeln.
Zitat:
1) Du definierst die Klasse als abstract - sie ist weiterhin sichtbar, aber man kann davon keine Instanzen erstellen 2) Du führst ein Interface ein, dass die anderen Klassen implementieren. Dann gibt es keine Basisklasse. |
Re: Versteckte Klasse entwickeln.
Ich habe keine Ahnung, wie man das bewerkstelligen sollte. Reicht die abstrakte Klasse denn nicht aus?
|
Re: Versteckte Klasse entwickeln.
Zitat:
|
Re: Versteckte Klasse entwickeln.
Zitat:
|
Re: Versteckte Klasse entwickeln.
Oh ja.. das hatte ich überlesen... :oops:
Das kommt davon wenn man nur den ersten Satz liest :mrgreen: Das ist dann natürlich nicht im Sinne von OOP.. |
Re: Versteckte Klasse entwickeln.
Zitat:
Die beste Entsprechnung dazu in Delphi wäre eine Klasse die im "implementation" Teil der Unit deklariert wird. Diese kann dann nur innerhalb dieser Unit benutzt werden. Wenn man selbst davon andere Klassen ableiten will gibt es allerdings Probleme. Verwendet man eine Forward-Deklaration wie hier:
Delphi-Quellcode:
Dann erhält man vom Compiler die Meldung, dass die Klasse TDefault noch nicht vollständig implementiert sei.uses classes, [.....]; type TDefault = class; TDefaultAbgeleitet = class(TDefault) procedure Test; override; // hier Compiler Fehlermeldung!! end; implementation type TDefault = class(TObject) procedure Test; virtual; end; end. Ein "verstecken" von Klassen im implementation-Teil ist also nur dann machbar wenn man die Klasse nicht selbst erweitern will. (dazu müsste man im Beispiel die Forward-Deklaration weglassen und könnte keine "TDefaultAbgeleitet" deklarieren) Immerhin könnte man so lokale Klassen mit Hilfsroutinen erzeugen die ausserhalb der Unit nicht sichtbar sind. Ciao, Ralf |
Re: Versteckte Klasse entwickeln.
Forward-Deklarationen müssen innerhalb eines zusammenhängendem Type-Blocks liegen.
also es darf zwischen den Forward-/Typen-Deklarationen nichts außer Typen sein > keine Konstanten, Proceduren und auch kein Bereichswechsel ala implementation |
Re: Versteckte Klasse entwickeln.
In Delphi Prism geht das. Dort kann man eine Klasse als internal deklarieren und dann nur innerhalb dieses Assemblies verwenden.
|
Re: Versteckte Klasse entwickeln.
Wenn du diese im Implementation Teil deklarierst, ist sie auch nur innerhalb der Unit sichtbar
|
Re: Versteckte Klasse entwickeln.
Was spricht dagegen, die Klasse in einer extra Unit zu deklarieren und diese einzubinden, nach außen dürfte diese dann, nicht sichtbar sein?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:04 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