Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Klasse ableiten -> auf private Var zugreiffen... (https://www.delphipraxis.net/144505-klasse-ableiten-auf-private-var-zugreiffen.html)

cherry 9. Dez 2009 10:07


Klasse ableiten -> auf private Var zugreiffen...
 
Hallo miteinander

Ich habe eine Komponente z.B. TMyComp(TCustomControl) jetzt habe ich dort im private Teil einige Variablen deklariert... z.B. myPrivateVar: Boolean;
Wenn ich jetzt eine Klasse von TMyComp ableite, z.b. class = TMyChildComp(TMyComp) kann ich dann auf myPrivateVar von TMyComp zugreiffen? wenn ja wie?

Danke schon mal

Namenloser 9. Dez 2009 10:09

Re: Klasse ableiten -> auf private Var zugreiffen...
 
Nein, bei private kannst du nur innerhalb der selben Klasse oder der selben Unit auf die Eigenschaft oder Methode zugreifen. Wenn du in Abgeleiteten Klassen Zugriff benötigst, musst du die Variable als protected deklarieren.

mkinzler 9. Dez 2009 10:10

Re: Klasse ableiten -> auf private Var zugreiffen...
 
Verschiebe diese in den protected Abschnitt.

cherry 9. Dez 2009 10:13

Re: Klasse ableiten -> auf private Var zugreiffen...
 
Ach du ***... und woher soll ich wissen dass ich später zugriff darauf benötige... ich denke dass es aber auch nicht sinvoll ist von Anfang an alle Methoden und Attribute als Protected zu deklarieren, oder???

Naja... werd halt versuchen die Variable nach Protected zu verschieben, hoffe das hat keinen Einfluss auf di Zig Projekte in denen die Komponente ein fester Bestandteil davon ist...

Danke und Guten Appetit... :thumb:

Phoenix 9. Dez 2009 10:32

Re: Klasse ableiten -> auf private Var zugreiffen...
 
Zitat:

Zitat von cherry
Ach du ***... und woher soll ich wissen dass ich später zugriff darauf benötige

Gar nicht.

Normalerweise soll eine Klasse den Zugriff auf private Felder so kapseln, dass jemand der die Klasse benutzt oder davon ableitet gar nicht weiss, ob es so ein Feld überhaupt gibt. Klassen verbergen die Implementierung. Deswegen sollte man in einer Klasse nur so viel wie absolut notwendig protected oder gar public machen.

DeddyH 9. Dez 2009 10:43

Re: Klasse ableiten -> auf private Var zugreiffen...
 
Und wenn Du die abgeleitete Klasse in der selben Unit deklarierst wie die Basisklasse und Dich die Codevervollständigung nervt (die zeigt nämlich auch die privaten Felder der Basisklasse), kannst Du deren private Felder auch als strict private deklarieren. Damit umgehst Du die automatische friend-Deklaration innerhalb derselben Unit.

cherry 9. Dez 2009 11:04

Re: Klasse ableiten -> auf private Var zugreiffen...
 
Danke für den Hinweis!

DeddyH 9. Dez 2009 11:08

Re: Klasse ableiten -> auf private Var zugreiffen...
 
Gern geschehen, ich finde das selbst recht praktisch. Allerdings gilt das dann für alle privaten Felder, eine Vermischung zwischen strict und nicht strict ist AFAIK nicht möglich (oder ich kenne den Trick nicht).

himitsu 9. Dez 2009 11:09

Re: Klasse ableiten -> auf private Var zugreiffen...
 
im Abschnitt "private-, protected-, public- und published-Deklarationen" der OH wird das alles auch nochmal ganz genau erklärt.

Delphi-Quellcode:
strict private
  {nur innerhalb der Klasse}
private
  {in der Klasse und auch in der Unit}
strict protected
  {nur in der Klasse und deren Ableitungen}
protected
  {nur in der Klasse und deren Ableitungen und auch den Units}
public
  {öffentlich}
published
  {im OI und per RTTI gelistet}


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