Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Sichtbarkeit von Eigenschaften verringern (https://www.delphipraxis.net/184787-sichtbarkeit-von-eigenschaften-verringern.html)

Codehunter 21. Apr 2015 09:45

Sichtbarkeit von Eigenschaften verringern
 
Hallo!

Ich weiß das Thema wurde früher schon kontrovers diskutiert: Kann man eine published-Property einer Vorfahrklasse in seiner abgeleiteten Klasse wieder auf protected setzen?

Der Hintergrund ist folgender: Ich möchte die Anzeige von Hints über ein Event wie z.B. "OnGetHintText" realisieren. Dadurch wird die published-Eigenschaft "Hint" überflüssig. Da aber diese Eigenschaft bereits in TControl published ist kann ich ja schlecht noch eine Ebene tiefer ansetzen und dort ableiten, wenn ich TWinControl-Fähigkeiten brauche.

Ich meine dass es in den neueren Delphis eine Möglichkeit gab, die Sichtbarkeit wieder zu verringern. Im Prinzip sowas wie "reintroduce", nur eben für Properties.

Grüße
Cody

FaTaLGuiLLoTiNe 21. Apr 2015 10:15

AW: Sichtbarkeit von Eigenschaften verringern
 
Zitat:

Zitat von Codehunter (Beitrag 1298641)
Ich meine dass es in den neueren Delphis eine Möglichkeit gab, die Sichtbarkeit wieder zu verringern. Im Prinzip sowas wie "reintroduce", nur eben für Properties.

Das würde mich ehrlich gesagt sehr wundern, weil das eines der Grundprinzipien objektorientierter Entwicklung ad absurdum führen würde. Jede abgeleitete Klasse muss mindestens die Schnittstelle ihrer Superklasse nach aussen hin anbieten, da sonst die Polymorphie nicht mehr gegeben ist.

himitsu 21. Apr 2015 11:45

AW: Sichtbarkeit von Eigenschaften verringern
 
Jupp, man kann nichts verstecken, was in einem Vorfahren sichtbar ist.
Vererbung erweitert immer nur und entfernt nichts.

Lösung: Entweder du lebst mit Hint und wirfst notfalls, bei Zuweisung, eine Exception,
oder du gehst den korrekten Weg und erbst von einem Vorfahren, wo das noch nicht sichtbar ist.

Aus diesem Grunde gibt es von ordentlich Komponenten entsprechende Custom-Vorfahren und der eigentliche Typ ändert nur noch die Sichtbarkeiten.
z.B. TEdit und TCustomEdit

Codehunter 21. Apr 2015 11:59

AW: Sichtbarkeit von Eigenschaften verringern
 
Wie gesagt, das ist ja schon in TControl published. Macht wenig Sinn bei TComponent anzusetzen und quasi den ganzen Erbenbaum bis zu TWinControl hin nochmal zu coden, nur damit man das Hint los wird.

Ich lasse das jetzt erstmal so stehen. Habe VBC 1.0.5 soeben mit Hint veröffentlicht.

Trotzdem bin ich der Meinung, ich habe schon mal irgendwo einen Fall gesehen, wo die Sichtbarkeit von published zurück auf protected gezwungen und tatsächlich nicht mehr in der IDE angezeigt wurde. Das war eine Kombination aus zwei nachgelagerten Keywords hinter der protected-Property-Deklaration. Eins zwang die Sichtbarkeit nach unten, das andere unterdrückte die Compilerwarnung. Aber beim besten Willen, ich wiss nicht mehr wo und wie.

mjustin 21. Apr 2015 12:19

AW: Sichtbarkeit von Eigenschaften verringern
 
Zitat:

Zitat von Codehunter (Beitrag 1298664)
Sichtbarkeit von published zurück auf protected gezwungen und tatsächlich nicht mehr in der IDE angezeigt wurde

Falls Unterdrücken in der IDE das Ausblenden im Objektinspektor meint: dafür gibt es UnlistPublishedProperty.
Zum Beispiel:

Delphi-Quellcode:
UnlistPublishedProperty(TImageEnListView , 'LargeImages');


Artikel auf Stackoverflow: Hide a property from object inspector in delphi

JasonDX 21. Apr 2015 12:24

AW: Sichtbarkeit von Eigenschaften verringern
 
Zitat:

Zitat von Codehunter (Beitrag 1298664)
Trotzdem bin ich der Meinung, ich habe schon mal irgendwo einen Fall gesehen, wo die Sichtbarkeit von published zurück auf protected gezwungen und tatsächlich nicht mehr in der IDE angezeigt wurde. Das war eine Kombination aus zwei nachgelagerten Keywords hinter der protected-Property-Deklaration. Eins zwang die Sichtbarkeit nach unten, das andere unterdrückte die Compilerwarnung. Aber beim besten Willen, ich wiss nicht mehr wo und wie.

Was passiert dann/soll passieren, wenn ich auf TControl zurück-'caste' und dann auf Hint normal zugreife?

mjustin 21. Apr 2015 12:36

AW: Sichtbarkeit von Eigenschaften verringern
 
Methoden können in der Sichtbarkeit herabgesetzt werden.

http://docs.embarcadero.com/products...rride_xml.html

himitsu 21. Apr 2015 12:45

AW: Sichtbarkeit von Eigenschaften verringern
 
Zitat:

Zitat von mjustin (Beitrag 1298676)
Methoden können in der Sichtbarkeit herabgesetzt werden.

http://docs.embarcadero.com/products...rride_xml.html

Dir ist bestimmt aufgefallen, da dieses eine "Fehlermeldung" des Compilers ist.

Also ja, man kann es machen, aber man darf sollte es nicht machen, drum meckert auch der Compiler. :roll:



In diesem Fall würde ich ein
Delphi-Quellcode:
stored False
und das Ausblenden im IO vorschlagen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:01 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