Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Frage zu Klassenvariablen (https://www.delphipraxis.net/199583-frage-zu-klassenvariablen.html)

Julian M. 3. Feb 2019 22:57

Delphi-Version: 5

Frage zu Klassenvariablen
 
Hallo,

es ist mir zwar etwas peinlich, aber ich muss mal eine Anfängerfrage zu Variablen in Delphi stellen.

Delphi-Quellcode:
  TForm1 = class(TForm)
    {was für einen status haben Variablen an dieser Stelle?}   
  private
    { private declarations }

  public
    { public declarations }
   
  end;

Schokohase 4. Feb 2019 01:01

AW: Frage zu Klassenvariablen
 
Die Sichtbarkeit ist auf jeden Fall wie
Delphi-Quellcode:
published
. Was für einen Status meinst du genau?

FYI "Klassenvariablen" heißen Felder.

Julian M. 4. Feb 2019 01:13

AW: Frage zu Klassenvariablen
 
Dankeschön! Das klärt schon das meiste.
Ich hab grad mal spasseshalber 'published' davor geschrieben und der compiler (Lazarus/Free Pascal) meckert nicht. Dann wird das der Einfachheit halber weg gelassen?
Und ist es richtig dass der Hauptunterschied zwischen published und public darin liegt, dass published für die Anzeige im Objektinspektor benötigt wird?

Liebe Grüße
Julian

jaenicke 4. Feb 2019 04:51

AW: Frage zu Klassenvariablen
 
Ja, das ist richtig.

Der schöne Günther 4. Feb 2019 08:07

AW: Frage zu Klassenvariablen
 
Man sollte der Vollständigkeit halber anführen dass das dein Formular (TForm) ein Sonderfall ist: Normalerweise ist die "Sichtbarkeit" bei Klassen und Records ohne weitere Angabe
Delphi-Quellcode:
public
.

Delphi-Quellcode:
TForm
leitet sich letztendlich von
Delphi-Quellcode:
TPersistent
aus
Delphi-Quellcode:
System.Classes
ab. Bei dieser Klasse wurde von den Delphi-Entwicklern eine Compiler-Einstellung vorgenommen dass es standardmäßig published sein soll:
Zitat:

Ein Element ohne Attribut erhält automatisch die Sichtbarkeit des vorhergehenden Elements in der Deklaration. Die Elemente am Anfang einer Klassendeklaration ohne explizite Sichtbarkeitsangabe werden standardmäßig als published deklariert, wenn die Klasse im Status {$M+} compiliert oder von einer mit {$M+} compilierten Klasse abgeleitet wurde. Andernfalls erhalten sie das Attribut public.
(Quelle)


Heißt:
Delphi-Quellcode:
type
   TMyObject = class(TObject)
      someField:   Integer; // <<< public
   end;
   
   TMyRecord = record
      someField: Integer; // <<< public
   end;
   
   TMyComponent = class(TComponent)
      someField:   Integer; // <<< published
   end;

Schokohase 4. Feb 2019 08:13

AW: Frage zu Klassenvariablen
 
Das geht so nicht
Delphi-Quellcode:
TMyComponent = class(TComponent)
      someField:  Integer; // <<< Compiler-Fehler
   end;

Der schöne Günther 4. Feb 2019 08:26

AW: Frage zu Klassenvariablen
 
Tatsächlich: "Es wurde versucht, ein Feld in einer Klasse als published zu deklarieren, das weder ein Klassen- noch ein Schnittstellentyp ist."

http://docwiki.embarcadero.com/RADSt...erface_(Delphi)

Dann machen wir aus "Integer" einfach "TObject" 😉

Ich glaube es bald Zeit für den ersten Covfefe ☕

peterbelow 4. Feb 2019 11:06

AW: Frage zu Klassenvariablen
 
Naja, published ist für den Designer konzipiert worden und den VCL-Komponentstreaming-Mechanismus, den er verwendet. Der streamed published properties und objekte in published fields, einfache Typen in published fields kann er nicht...


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