Autor Beitrag
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: So 29.07.12 22:35 
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?

ausblenden 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,

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: 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:

ausblenden 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.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."

Für diesen Beitrag haben gedankt: FinnO