Mirror

The power of accessors (Views: 101)


Problem/Question/Abstract:

Making properties in your objects and using the accesors to do something.

Answer:

Property accessors are great.  They give you the power to do stuff like initialize an object or produce data that are dependent on the object's other properties.

You can make properties by declaring them in your interface section and then pressing Ctrl+Shift+'c'  it wil make a private variable called Fsomeproperty and a set methode called SetSomeProperty.

In this example i made an object that has a property that holds an other object and on the Read of this property i'll check whether it's not nil so i can create it on runtime.

You can also check if a value is within it's bounds on the Property's Set Accessor

type
  TMySubObject = class

  end;

  TMyObject = class
  private
    fMySubObject: TMySubObject;
    FASecondNum: Integer;
    FAFirstnum: Integer;
    function getMySubObject: TMySubObject;
    function GetTotaalOfFirstAndSecondNum: integer;
    procedure SetFirstnum(const Value: Integer);
  public

    property MySubObject: TMySubObject read getMySubObject;
    property AFirstnum: Integer read FAFirstnum write SetFirstnum;
    property ASecondNum: Integer read FASecondNum write FAFirstnum;
    property TotaalOfFirstAndSecondNum: integer read
      GetTotaalOfFirstAndSecondNum;
  end;

implementation

{$R *.DFM}

{ TMyObject }

function TMyObject.getMySubObject: TMySubObject;
begin
  // i check here to see if its assigned
  if not Assigned(fMySubObject) then
    fMySubObject := TMySubObject.Create;
  Result := fMySubObject;
end;

function TMyObject.GetTotaalOfFirstAndSecondNum: integer;
begin
  Result := FAFirstnum + FASecondNum;
end;

procedure TMyObject.SetFirstnum(const Value: Integer);
begin
  // here on the set u can check bounds :) .
  if (Value > 0) and (Value < 1000) then
    FAFirstnum := Value
  else
    raise Exception.Create('Number out of bounds');
end;

<< Back to main page