AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Komponentenableitung Vererbung Property

Ein Thema von Blitzschutz1 · begonnen am 18. Sep 2022 · letzter Beitrag vom 19. Sep 2022
Antwort Antwort
Blitzschutz1

Registriert seit: 2. Dez 2011
Ort: Vogtland (über Bayern)
25 Beiträge
 
Delphi 10.4 Sydney
 
#1

Komponentenableitung Vererbung Property

  Alt 18. Sep 2022, 20:12
Ich steh' mal wieder auf dem Schlauch:

TMaskEdit ist von TCustomMaskEdit abgeleitet und TCustomMaskEdit von TCustomEdit. Soweit so gut.
Aber warum sehe ich dann bei TMaskEdit das Property NumbersOnly nicht mehr. Ich denke, ein Nachfahr erbt alle
Eigenschaften usw. vom Vorgänger und man kann z.B. ein Property, das beim Vorfahr vorhanden ist, im Nachfahr nicht
"weglassen" (jedenfalls nicht ohne Tricks...).

Oder habe ich da wieder was falsch auf dem Schirm?
Wenn die Klugen nachgeben geschieht das was die Dummen wollen!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.623 Beiträge
 
Delphi 12 Athens
 
#2

AW: Komponentenableitung Vererbung Property

  Alt 18. Sep 2022, 20:41
Ich habe gerade kein Delphi zur Hand, aber in vielen TCustomXXX-Komponenten sind diverse Properties als protected deklariert und die Sichtbarkeit erst in den Nachfahren erhöht. Das heißt aber nicht, dass die Nachfahren dies mit allen Properties tun. Wenn nicht, bleiben diese halt protected und sind somit von außen nicht sichtbar.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#3

AW: Komponentenableitung Vererbung Property

  Alt 19. Sep 2022, 10:33
Genau, man erbt alle Eigenschaften, aber wenn sie ausgeblendet (protected) sind, ist man nicht gezwungen sie zu benutzen (nur intern oder nach public/publiched verschoben).

NumbersOnly macht beim Maskedit keinen Sinn, da es als "Text"-Edit konzipiert ist,
aber dort kannst du das "nur nummern" auch mit der Maske regeln.

Oder du leitest selber nochmal von TCustomMaskEdit/TMaskEdit ab und implementiersts das mit dem NumbersOnly.




Sowas passiert öfters mal. Einige gemeinsame Funktioninen sind in Basisklassen implementiert (noch versteckt), bzw. sie haben zumindestens die Schnittstelle dafür (aber noch keine Funktion),
und in vielen Nachfahren wird es dann sichtbar gemacht, bzw. das leere Interface (virtual/abstract) wird dann mit Code gefüllt.
Aber wer das nicht braucht, lässt es eben einfach weg und versteckt es weiterhin (protected) ... siehe TMaskEdit und NumbersOnly



Zitat:
Ich denke, ein Nachfahr erbt alle
Eigenschaften usw. vom Vorgänger und man kann z.B. ein Property, das beim Vorfahr vorhanden ist, im Nachfahr nicht
"weglassen" (jedenfalls nicht ohne Tricks...).
Im Prinzip richtig.

Klar, man kann Dinge von public/published auch wieder ins private/protected verschieben,
aber erstmal meckert dann der Compiler (manchmal funktioniert es auch einfach nicht und bleibt sichtbar ... k.A. warum)
und außerdem kommt man über einen Cast in einen Vorfahren dennoch ran.

Und außerdem wird hier nichts weggelassen, denn es war ja niemals öffentlich sichtbar, also ist alles vollkommen korrekt.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (19. Sep 2022 um 10:38 Uhr)
  Mit Zitat antworten Zitat
Blitzschutz1

Registriert seit: 2. Dez 2011
Ort: Vogtland (über Bayern)
25 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Komponentenableitung Vererbung Property

  Alt 19. Sep 2022, 11:18
Ja, Ihr habt beide recht! Die Eigenschaft NumOnly ist in der Klasse TCustomEdit als protected deklariert:

Code:
 
Vcl.StdCtrls

TCustomEdit = class(TWinControl)
.
.
.
protected
.
.
.
property NumbersOnly: Boolean read FNumbersOnly write SetNumbersOnly default False;
property PasswordChar: Char read FPasswordChar write SetPasswordChar default #0;
.
.
.
Mein Problem eines eigenen TMaskEdit war, dass ich von TEdit abgeleitet habe und hatte dann dieses NumOnly-Property (wie auch PassworChar) automatisch mit in den Eigenschaften. Also werde ich mal von TCustomEdit ableiten, muss dann halt alle Eigenschaften, die ich von TEdit benötige, selber implementieren. Aber es gibt ja die Sourcen...

Schöne Woche!
Wenn die Klugen nachgeben geschieht das was die Dummen wollen!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#5

AW: Komponentenableitung Vererbung Property

  Alt 19. Sep 2022, 12:04
Selber implementieren (inkl. Programmcode/Funktion) ist ja bei Vielem nicht nötig, abgesehn von der verschobenen Deklaration.

Delphi-Quellcode:
published
  property NumbersOnly; // ohne den Typen ": Boolean"
und ohne dem read/write, wenn man da nichts ändern will, wie z.B. eigener Setter
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:23 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