Einzelnen Beitrag anzeigen

xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#12

Re: private, public und der Rest

  Alt 6. Feb 2006, 10:07
Hallo,
Zitat von _SolidSnake_:
...(am besten aber in private) solange ich die Verbindung nur in dieser Unit aufbaue.
Genau. Die Regel lautet: Nur soviel Sichtbarkeit, wie unbedingt nötig. Wenn Du die Variable nur in Form1 brauchst, dann ist private richtig.
Zitat von _SolidSnake_:
Wenn ich aber die z.B. "_myCon" in Form1 deklariere und die Verbindung dort aufbaue aber eine SQL-Abfrage in Form2 starte wuzu ich dort ja auch "myCon" benötige dann muss ich diese unter var deklarieren, richtig ?
Nicht ganz. In Diesem Fall solltest Du die Variable unter public definieren, dann kannst Du mittels Form1.Variablenname darauf zugreifen. Eleganter wäre aber folgendes:
Delphi-Quellcode:
TForm1 = class(TForm)
private
  FmyCon: PMySQL;
  function GetmyCon: PmySQL; // Der Getter
public
  property myCon: PmySQL read GetmyCon; // Lesen mit Getter
end;

function TForm1.GetmyCon: PmySQL;
begin
  Result := FmyCon;
end;
Damit erlaubst Du es, dass die Variable öffentlich zugänglich ist (per Delphi-Referenz durchsuchenProperty), aber nur gelesen werden kann. So kann jeder die Variable benutzen, aber den Wert nicht ändern.
Wenn Du den Wert ändern willst, kannst Du das auch so machen:
Delphi-Quellcode:
TForm1 = class(TForm)
private
  FmyCon: PMySQL;
  FStatus: Integer;
  function GetmyCon: PmySQL; // Der Getter
  procedure SetmyCon(const Value: PmySQL); // Der Setter
public
  property myCon: PmySQL read GetmyCon write SetmyCon; // Lesen und Setzen mit Getter und Setter
  property Status: Integer read FStatus; // Direktes Lesen der Variablen
end;

function TForm1.GetmyCon: PmySQL;
begin
  Result := FmyCon;
end;

procedure TForm1.SetmyCon(const Value: PmySQL);
begin
  ShowMessage('Die Variable ändert sich!');
  FmyCon := Value;
end;
Da kannst Du beim Setzen der Variable z. B. noch Überprüfungen durchführen.
Das Ganze nennt sich Kapselung. Es ist immer besser, Properties zu verwenden und die Variable in private zu verstecken. Wenn Du Dir die VCL-Quellen anschaust, siehst Du, dass Borland das nie anders macht.
Zitat von _SolidSnake_:
aber ich hab bis vor kurzem mit PHP gearbeitet und da war alles etwas einfacher was die Variablen anging.
Wenn man in PHP mit Klassen arbeitet, dann funktioniert das (fast) genauso. Es gibt z. B. auch private und public .

Gruß
xaromz
  Mit Zitat antworten Zitat