AGB  ·  Datenschutz  ·  Impressum  







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

private, public und der Rest

Ein Thema von Hansa · begonnen am 3. Feb 2006 · letzter Beitrag vom 6. Feb 2006
Antwort Antwort
Seite 1 von 2  1 2      
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#1

private, public und der Rest

  Alt 3. Feb 2006, 19:54
Hi,

hier ist eine grundsätzliche Frage aufgetaucht : private, protected usw. ist klar. Aber was ist mit dem Rest ? Also die Deklarationen oben in den Forms ? Habe eine Eigenschaft als private deklariert um was zu testen => Zugriffsverletzung. Nach Verschieben in den oberem Bereich ist die Fehlermeldung weg. Wie hängt das alles zusammen ? Bzw. was muß da hin ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#2

Re: private, public und der Rest

  Alt 3. Feb 2006, 19:55
ohne Angabe => published (ergo für die RTTI greifbar).

[edit] Etwas genauer:
Zitat von OH:
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.
[/edit]
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#3

Re: private, public und der Rest

  Alt 3. Feb 2006, 20:01
HI,
alles was ohne eigenen Bezeichner in einer Klasse (insbesondere Forms und Frames) steht, solltest du eigentlich immer schön in Ruhe lassen. Hier gehört der Code hin, den Delphi selbst verwaltet (alle Elemente auf dem Form und alle behandelten Ereignisse). Wie Khabarakh schon sagte, entspricht die Sichtbarkeit dem published, aber eigene Zeilen sollten deshalb trotzdem unter published aufgeführt werden.

Ok, auch wenn die Hilfe OH es nicht explizit sagt, bin ich mir doch recht sicher, dass Delphi irgendwo mal behauptet hat, dass dieser Bereich für den automatischen Code vorgesehen ist.

Gruß Der Unwissende
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: private, public und der Rest

  Alt 3. Feb 2006, 20:01
private : Sichtbar nun in Methoden dieser Klasse und in abgeleiteten Klassen, die in der selben Unit definiert sind.
protected: Sichtbar in Merthoden der eigenen Klasse und in den Methoden aller abgeleiteten Klassen
public: Auch von anderen Klassen bzw. "Globalcode" sichtbar, wenn Unit in Uses.
published: wie schon erwähnt, zusätzliche Registrierung RTTI(Runtime Type Information). Properties von in der IDE registrierten Komponenten, kann man im Objektinspektor manipulieren.

Nachtrag: Interessant wieviel Tippfehler ich in ein paar Sätzen produzieren kann
Markus Kinzler
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#5

Re: private, public und der Rest

  Alt 3. Feb 2006, 20:15
Zitat von Der_Unwissende:
aber eigene Zeilen sollten deshalb trotzdem unter published aufgeführt werden.
...
Ok, auch wenn die Hilfe OH es nicht explizit sagt, bin ich mir doch recht sicher, dass Delphi irgendwo mal behauptet hat, dass dieser Bereich für den automatischen Code vorgesehen ist.
Habe es getetest : public reicht tatsächlich nicht. Mit published oder oben deklarieren geht alles. Nur wo ist jetzt der Unterschied ? Ist es egal, oder @Unwissender : warum ist Deklaration unter published besser ? Die OH gibt da wirklich nicht viel her. Meine Vermutung geht dahin, daß oben die ohnehin als published (also im OI sichtbaren) Sachen deklariert sind und das published unnötig ist. Meine Sachen sind aber sehr OOP (in diesem Falle : lastig), so daß die Frage noch wichtig werden könnte.
Gruß
Hansa
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#6

Re: private, public und der Rest

  Alt 3. Feb 2006, 20:30
Also wenn du sehr OOP lastig programmierst, dann ist es natürlich vollkommen egal welchen der beiden Bereiche du wählst Der einfache Grund, warum du deine eigenen Zeilen eine Sichtbarkeit explizit zuordnen solltest, ist die Eindeutigkeit.
Es ist einfach sauberer (imho), wenn jeder sofort sehen kann, welche Sichtbarkeit explizit vorgesehen wurde (und gerade in Delphi wird so ziemlich alles explizit ausgezeichnet).
Und wie gesagt, der von Delphi selbst verwaltete Code landet immer in dem nicht weiter benannten Bereich. Hier kommt also Code hinzu und wird entfernt und das alles automatisch, da dies nicht für deinen Code gilt, denke ich ist es einfach schöner, den richtigen Bereich zu wählen.
An der eigentlichen Sichtbarkeit wird sich sicherlich nicht viel ändern und unter dem Aspekt betrachtet ist es egal.

Gruß Der Unwissende
  Mit Zitat antworten Zitat
_SolidSnake_

Registriert seit: 3. Feb 2006
Ort: Pulheim
28 Beiträge
 
Delphi 2005 Architect
 
#7

Re: private, public und der Rest

  Alt 6. Feb 2006, 09:23
Hallo.

Es tut mir leid wenn ich nochmal nachfragen muss, aber ich hab es leider nicht ganz verstanden

Ich habe als Grundlage den Thread über die MySQL-Verbindung ohne Komponenten von Chewie genommen und für meine Zwecke ein wenig erweitert.

Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
      _myCon: PMySQL; //unseren Verbindungsdeskriptor
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
wo ist der Unterschied ob ich die "_myCon: PMySQL" unter private, public oder einfach bei var deklariere ?
Ich hab sie bereits in alle drei Bereiche verschoben und die Anwendung funktioniert bei allen drei Möglichkeiten.
Sollte mich ja eigentlich freuen das es funktioniert, aber ich würde gerne wissen warum und ob das wirklich egal ist wo sie steht.

Gruß
Micha
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: private, public und der Rest

  Alt 6. Feb 2006, 09:26
Bei Verwendung in Methoden der Klasse ist es wirklich "egal" in welchem Bereich deklariert wurde. Von "außen" macht es aber einen Unterschied. Siehe meinen ersten Post in diesem Thread.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#9

Re: private, public und der Rest

  Alt 6. Feb 2006, 09:28
Hai _SolidSnake,

ich hoffe das ich es richtig zusammen bekomme Ansonsten einfach mal in der Onlinehilfe schauen

Zitat von _SolidSnake_:
...wo ist der Unterschied ob ich die "_myCon: PMySQL" unter private, public oder einfach bei var deklariere ?...
Wenn Du eine Delphi-Referenz durchsuchenVar deklarierst ist dies eine Globale Variable die in der gesamten Unit vorhanden ist.
Wenn Du es unter Delphi-Referenz durchsuchenprivate deklarierst ist es ein Member deiner Klasse (TForm1) und auch nur in dieser sichtbar.
Wenn Du es als Delphi-Referenz durchsuchenpublic ist es auch ausserhalb der Klasse sichtbar.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Lemmy1
Lemmy1

Registriert seit: 28. Nov 2004
Ort: Ismaning
184 Beiträge
 
Delphi 2006 Professional
 
#10

Re: private, public und der Rest

  Alt 6. Feb 2006, 09:29
Zitat von mkinzler:
private : Sichtbar nun in Methoden dieser Klasse und in abgeleiteten Klassen, die in der selben Unit definiert sind.
protected: Sichtbar in Merthoden der eigenen Klasse und in den Methoden aller abgeleiteten Klassen
public: Auch von anderen Klassen bzw. "Globalcode" sichtbar, wenn Unit in Uses.
published: wie schon erwähnt, zusätzliche Registrierung RTTI(Runtime Type Information). Properties von in der IDE registrierten Komponenten, kann man im Objektinspektor manipulieren.

Nachtrag: Interessant wieviel Tippfehler ich in ein paar Sätzen produzieren kann
Private ist auch sichtbar in Klassen derselben Unit, die keine Nachfahren sind generell heisst private einfach "innerhalb der Unit". Gibt aber auch "strict private", dann isses nur innerhalb der Klasse sichtbar.

Grüße
Daniel
www.nemu.com - The N64 Emulator
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 10:18 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