Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - OOP: Alles public geerbte zu private machen
WeBsPaCe - Do 23.09.10 03:27
Titel: OOP: Alles public geerbte zu private machen
Hi,
ich führ das jetzt mal gar nicht weiter aus: ich möchte, dass für die Tochterklasse alles, was sie als public geerbt hat, jetzt zu private wird ohne alles selbst unter private mit reintroduce; reinzuschreiben und dann mit inherited die geerbte Methode aufzurufen.
Falls das nicht verständlich ist, führ ich's morgen weiter aus, aber könnte mir vorstellen, dass schon mal jemand damit gekämpft hat.
Also, vielen Dank schon mal,
Gruß.
Tilman - Do 23.09.10 03:44
Tja, ganz einfach: das geht nicht. Und übrigens auch nicht mit reintroduce, denn die public-Methode bleibt erhalten, und wenn man dann eine Instanz erzeugt merkt man von der Private-Methode nichts und kann die alte Methode problemlos aufrufen.
Wenn du die Elternklasse selbst definiert hast, dann solltest du alle Methoden die du in der Tochterklasse nicht zu sehen wünschst als "protected" deklarieren, und davon dann die Tochter ableiten - die protected-Methoden sind dann unsichtbar. Zusätzlich kannst du eine weitere Version ableiten, welche die Sichtbarkeit aller protected-Methoden nach "public" ändert. Diese zweite Tochter verhält sich dann genau so wie deine bisherige Elternklasse und ersetzt diese. In der VCL wurde das genau so gemacht, die Elternklassen heißen dort "TCustom...".
Wenn du nicht der Urheber der Elternklasse bist, dann musst du schauen ob es einen Custom-Vorfahren gibt, sonst kannst du nicht viel machen in der Richtung.
WeBsPaCe - Do 23.09.10 13:12
Hi, danke für die Antwort!
Tilman hat folgendes geschrieben : |
| Tja, ganz einfach: das geht nicht. Und übrigens auch nicht mit reintroduce, denn die public-Methode bleibt erhalten, und wenn man dann eine Instanz erzeugt merkt man von der Private-Methode nichts und kann die alte Methode problemlos aufrufen. |
Jup, stimmt, blöde Idee. :lol: War zu spät.
Gut, dann hat sich das wohl erledigt. Einmal
public, immer
public.
Habe das jetzt so gelöst, dass ich zwei Klassen neu definiere: die eine davon ist die von der ich oben sprach, die mit den vielen
public Methoden, welche verschwinden sollen. Die andere ist einfach ein Platzhalter und bekommt unter
private eine Instanz der vorherigen Klasse.
Na, was sagst du dazu? 8)
Also danke dir nochmal,
Gruß.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!