Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: Stefano - Febbraio 25, 2012, 05:19:48 pm

Titolo: gestione parametri su Property
Inserito da: Stefano - Febbraio 25, 2012, 05:19:48 pm
Le property sono sempre state ostiche, soprattutto perche' non capisco il vantaggio tra usare una Property o una procedure/function;
Vabbe' comunque voglio venirne a capo, ora sto provando e sbatto....

Definisco una classe derivata  TGestioneConnessione e a questa vorei assegnare delle Property

Per la Disconnetti , va bene perche' non ha parametri;
Ma con la Connetti, non risco a trovare la soluzione

nel Form che usera' la Tfrm_Connetti

...
var cl_Connessione: TGestioneConnessione;
begin
  cl_Connessione := TGestioneConnessione.Create;
  cl_Connessione.<property per chiamare ConnettiDataBase>
  ....

Date un'occhiata ed eventualmente aiutatemi a capire come fare.
grazie


sulla unit di connessione

type
  Tfrm_ConnettiFb = class(TDataModule)
    FirebirdConnection: TSQLConnection;

  private
    { Private declarations }

  public
    { Public declarations }
  end;

  TGestioneConnessione = class(Tfrm_ConnettiFb)

  private
    { Private declarations }
    fsTipo, fsNomeDB: string;
    function DisconnettiDataBase: Boolean;
    function ConnettiDataBase(fsTipo, fsNomeDb: string): Boolean;

  public
    { Public declarations }
    property Disconnetti: boolean read DisconnettiDataBase;

   ... questa dichiarazione e' sbagliata .....
    property Connetti: Boolean read ConnettiDataBase(fsTipo, fsNomeDB);
  end;
Titolo: Re:gestione parametri su Property
Inserito da: Legolas - Febbraio 25, 2012, 06:03:44 pm
Le property non si usano in quel modo, ma servono per impostare/recuperare il valore di una variabile privata, associandola a due metodi getter/setter. Faccio un classico esempio per chiarire :)

Prendiamo una classe TRadio che rappresenta il funzionamento di una radiolina.
Codice: [Seleziona]
  TRadio = class
  private
    fVolume: integer;
    function GetVolume: integer;
    procedure SetVolume(AValue: integer);
  public
    property Volume: integer read GetVolume write SetVolume;
  end;

Decidiamo che fVolume può variare, ad esempio, da 0 a 10. La property serve proprio ad accedere al valore di fVolume in modo tale che non vada al di fuori di questi parametri:

Codice: [Seleziona]
function TRadio.GetVolume: integer;
begin
  result := fVolume;
end;

procedure TRadio.SetVolume(AValue: integer);
begin
   if (aValue >= 0) and (aValue <=10) then
    fVolume := aValue;
end; 

A questo punto, se provo ad assegnare un valore maggiore di 10 alla property Volume, il valore non viene modificato:

Codice: [Seleziona]
var
  radio: TRadio;
...

radio := TRadio.Create;

radio.Volume := 3;

writeln(radio.Volume); // il volume è 3

radio.Volume := 15;

writeln(radio.Volume); // il volume è sempre 3!

Per fare quello che serve a te, è sufficiente dichiarare come pubbliche le due funzioni:
Codice: [Seleziona]
public
  function DisconnettiDataBase: Boolean;
  function ConnettiDataBase(fsTipo, fsNomeDb: string): Boolean;
   
 

Spero di averti chiarito il concetto :)
Titolo: Re:gestione parametri su Property
Inserito da: Stefano - Febbraio 25, 2012, 06:51:33 pm
Si certo, grazie.