Property/fi

From Free Pascal wiki
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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