Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - getter, setter, Felder und Eigenschaften


FinnO - So 29.07.12 22:35
Titel: getter, setter, Felder und Eigenschaften
Moin,

es kommt sicherlich spät, aber irgendwie kann ich diesem ganzen geraffel mit gettern und settern usw. nicht so wirklich folgen:

Wozu brauche ich überhaupt getter und setter?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
type c = class
private
  fTest : integer;

public
  property Test : integer read fTest write fTest;

end;


funktioniert doch optimal, wozu also der Aufwand,


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
type c = class
private
  procedure setTest(value:integer);
  function getTest : integer;

public
  property Test read getTest write setTest;
end;

implementation

function c.getTest : integer
begin
  result := Test;
end;

procedure c.setTest(value:integer)
begin
  Test := value;
end;


Und vor allem: Muss man die Funktionen überhaupt implementieren? Ich bin da durch den nutzen noch nicht durchgestiegen. Wozu nutzt man überhaupt properties, wenn man das ganze mit get und set auch C++-Style nur über membervariablen laufen lassen könnte?

LG


Martok - So 29.07.12 22:56

Für dein Beispiel braucht man keine, aber wenn du z.B. Gültigkeitsprüfungen machen willst (wir haben ja keine pre/postconditions), brauchst du ja irgendwie Code:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
property Width: integer read FWidth write SetWidth;

procedure TFoo.SetWidth(const Value: integer);
begin
  if Value < 0 then
    raise Exception.Create('Bringt nix');
  FValue:= Value;
end;


TComponent.Name ist auch ein schönes Beispiel.

Getter sind was anderes, da könntest du dir TCanvas.Pixels angucken: man braucht sie eigentlich nur, wenn man irgendwas wrappt.