AGB  ·  Datenschutz  ·  Impressum  







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

Frage zu Klassenvariablen

Ein Thema von Julian M. · begonnen am 3. Feb 2019 · letzter Beitrag vom 4. Feb 2019
Antwort Antwort
Julian M.

Registriert seit: 28. Dez 2010
41 Beiträge
 
#1

Frage zu Klassenvariablen

  Alt 3. Feb 2019, 23:57
Delphi-Version: 5
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;
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#2

AW: Frage zu Klassenvariablen

  Alt 4. Feb 2019, 02:01
Die Sichtbarkeit ist auf jeden Fall wie published . Was für einen Status meinst du genau?

FYI "Klassenvariablen" heißen Felder.
  Mit Zitat antworten Zitat
Julian M.

Registriert seit: 28. Dez 2010
41 Beiträge
 
#3

AW: Frage zu Klassenvariablen

  Alt 4. Feb 2019, 02:13
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
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Frage zu Klassenvariablen

  Alt 4. Feb 2019, 05:51
Ja, das ist richtig.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.156 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Frage zu Klassenvariablen

  Alt 4. Feb 2019, 09:07
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 public .

TForm leitet sich letztendlich von TPersistent aus 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;
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#6

AW: Frage zu Klassenvariablen

  Alt 4. Feb 2019, 09:13
Das geht so nicht
Delphi-Quellcode:
TMyComponent = class(TComponent)
      someField: Integer; // <<< Compiler-Fehler
   end;
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.156 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Frage zu Klassenvariablen

  Alt 4. Feb 2019, 09:26
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 ☕
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
701 Beiträge
 
Delphi 12 Athens
 
#8

AW: Frage zu Klassenvariablen

  Alt 4. Feb 2019, 12:06
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...
Peter Below
  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 09:59 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