Autor Beitrag
WeBsPaCe
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2322
Erhaltene Danke: 1

FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
BeitragVerfasst: Do 23.09.10 03:27 
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ß.

_________________
Steht der Bauer im Gemüse, hat er später grüne Füße.
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: 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.

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
WeBsPaCe Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2322
Erhaltene Danke: 1

FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
BeitragVerfasst: Do 23.09.10 13:12 
Hi, danke für die Antwort!

user profile iconTilman hat folgendes geschrieben Zum zitierten Posting springen:
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ß.

_________________
Steht der Bauer im Gemüse, hat er später grüne Füße.