Property/fi

From Free Pascal wiki

Deutsch (de) English (en) suomi (fi) français (fr)

Varattu sana property on osa olio-ohjelmointia. Sillä voidaan sallia eri tasojen (lukea, lukea / kirjoittaa jne.) ulkopuolelta pääsy käsiksi luokan sisällä oleviin muuttujiin.

Esimerkki

type
  TCar = class
  private
    FColor: string;
    FBuildYear: integer;
    procedure SetColor(CarColor: string);
  public
    property Color: string read FColor write SetColor; 
     // Lukee suoraan FColor-muuttujaa;
     // Ohjaa kirjoittamisen SetColor-aliohjelmaan, joka muuttaa sitten FColor-muuttujaa.
     // Toinen vaihtoehto voisi olla vain "write FColor" joka kirjoittaisi suoraan FColor-muuttujaan ..
  end;

procedure TCar.SetColor(CarColor: string);
begin
  // Myös muita asioita voidaan tehdä täällä , kuten "taloudenhoito", ilmoittaa muille muutoksista,
  // validointi muihin muuttujiin, kirjautumiseen, etc -eg
  if CarColor='Pink' then
    ShowMessage('Note: pink is not a very common color for a car.');
  FColor:=CarColor;
end;

procedure PropertyExample();   // Näyttää, miten asetetaan property ja luetaan se
var
  MyCar: TCar;                 // Pitää TCar-esiintymää;  jota käytetään esimerkissä subAuto
begin
  MyCar := TCar.Create;        // Luo olion
  try
    MyCar.Color:='Green';      // Asettaa color property... joka kutsuu setcolor aliohjelmaa... joka asettaa kyseisen olion FColor muuttujan
    showmessage(MyCar.Color);  // Nyt luetaan olion property uudestaan... pitäisi näyttää Green
  finally
    MyCar.Free;                // Vapauttaa olion muistin, riippumatta siitä, mitä poikkeuksia muussa koodissa tapahtui
  end;
end;

Oliot ominaisuuksina

Olioita voidaan liittää myös ominaisuuksina. Esim.:

type
  TEngine = class
  ...
  TCar = class
  private
    FMyEngine: TEngine;
  public
    property Engine: TEngine read FMyEngine;
  implementation
  // ...
  // Tähän koodi TCar, joka luo ja vapauttaa FMyEngine tarpeen mukaan
  // (esim. constructor ja destructor)
  // ...

Lue käyttöoikeus täällä tarkoittaa jotain, joka ei välttämättä ole ilmeinen ensi silmäyksellä. Ulkopuolella oleva koodi on lukenut vain pääsyn kyseiselle TEngine-objektille osoittimelle / viittaukselle, mikä tarkoittaa, ettei se pysty luomaan tai tuhoamaan objektia.

Kuitenkin se voi käyttää tätä lukemisominaisuutta päästä käsiksi FMyEngine-objektin ominaisuuksiin ja muuttaa niitä.


Jos halutaan antaa kutsukoodille vastuu luoda ja tuhota olio, voidaan myös antaa kirjoitusoikeus esim.

...
  public
    property Engine: TEngine read FMyEngine write FMyEngine;
...

Katso myös