Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi public - private und welchen Status haben Objecte davor? (https://www.delphipraxis.net/89424-public-private-und-welchen-status-haben-objecte-davor.html)

PinKing 30. Mär 2007 22:57


public - private und welchen Status haben Objecte davor?
 
Guten Abend,
gerade ebend hab ich nach 30 Minuten bei mir die Fehlersuche erfolgreich beenden können. Der Fehler ist behoben, aber die Sache noch nicht erledigt ;-)
Denn nun würd ich ihn auch gerne verstehen. Ich hatte in meinem Form eine Image-Fläche eingebunden. Delphi hatte diese autoamtisch vor private deklariert:

Delphi-Quellcode:
type
  TForm1 = class(TForm)

   Image1:TImage;
  private

  public
 end;
Mein Informatiklehrer meinte aber zu uns das es so unsauber wäre. Also hatte ich es unter private geschoben, da dieses Attribut nur für diese Klasse zur Verfügung stehen sollte. Wenn ich jetzt aber das Programm compilieren möchte werde ich mit diesem fehler konfrontiert:
"Im Project1.exe ist eine Exception der Klasse EClassNotFound aufgetreten. Meldung: 'Klasse: TImagenicht gefunden'.Prozess wurde angehalten. Mit Einzelanweisung oder Start fortsetzen."

WARUM ?:gruebel: und wie sind diese Objecte zu bewerten, gehören sie zu private, zu public oder was sind die nun?

Ich hoffe das mir jemand helfen kann. :)

lg
Pin

Bernhard Geyer 30. Mär 2007 23:07

Re: public - private und welchen Status haben Objecte davor?
 
Sicherlich hat dein Info-Lehrer recht das diese vom GUI-Designer privat gelegten Member-Variablen alles andere als der reinen Lehrer entsprechen da sie ohne Angabe einer Sichtbarkeit zu public (oder wars published :gruebel: ) gehören.
Jedoch hat man es bei Borland zu Delphi 1-Zeiten nicht besser gewußt bzw. keine bessere Lösung gefunden als das die Membervariablen entsprechend definiert sind und die dazugehöhrigen Einstellungen in einer gesonderten DFM-Datei gespeichert sind um das Kompilieren so zu ermöglichen wie man es gewohnt ist. In der Exe stehen die Infos der DFM-Datei binär Codiert als spezielle Ressourcen so das beim Formular erzeugen diese per Streaming geladen werden kann.

Wenn du diese nun in den private-Abschnitt verschiebst können die entsprechenden Membervariablen nicht mehr per RTTI erkannt werden und erzeugt werden.

In .NET war man schon einen schritt schlauer so das für jede Membervariable die Sichtbarkeit angegeben werden kann ohne das es beim Formular erzeugen probleme gibt.

PinKing 30. Mär 2007 23:24

Re: public - private und welchen Status haben Objecte davor?
 
ah okay, vielen dank :)

mkinzler 31. Mär 2007 06:43

Re: public - private und welchen Status haben Objecte davor?
 
Member-Variablen oder Methoden überhalb von privtae sind managed. Dh. sie werden von der IDE verwaltet. An ihene sollte man nichts ändern und sie auch nicht verschieben, da dies negative Folgen hat und auch zu unerwarteten Nebeneffekten führen kann.

TBx 31. Mär 2007 07:28

Re: public - private und welchen Status haben Objecte davor?
 
Bleibt nur noch zu bemerken, dass diese Variablen public sind. In Delphi (Win32) gilt, dass in Objekten alles public ist, was nicht in einem entsprechend anders deklarierten Abschnitt deklariert wird.
Das ist einer der großen Unterschiede zu C++, dort ist grundsätzlich erst mal alles private.

Gruß

onlinekater

PinKing 31. Mär 2007 08:23

Re: public - private und welchen Status haben Objecte davor?
 
okay vielen dank ;-)
das mit den negativen auswirkungen hab ich ja gemerkt gehabt :D

lg
Pin


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