Multiple Helpers in the same scope

Top 

Example code: Multiple Helpers in the same class scope

{ TPessoa class }

 

type

  TPessoa = class

  private

    FDataNasc: TDateTime;

  public

    property DataNasc: TDateTime read FDataNasc write FDataNasc;

  end;

 

type

  TPessoaHelper = class helper for TPessoa

    private

      function GetIdade: integer;

    public

    property Idade: integer read GetIdade;

  end;

 

  //TPessoaFisicaHelper = class helper (TPessoaHelper) for TPessoa

  TPessoaFisicaHelper = class helper for TPessoa

    public

      function isValidCPF():Boolean;

  end;

 

  //TPessoaJuridicaHelper = class helper (TPessoaFisicaHelper) for TPessoa

  TPessoaJuridicaHelper = class helper for TPessoa

    public

      function isValidCNPJ():Boolean;

  end;

 

  TIntHelper = record helper for integer

    public

      function ToStr(): String;

  end;

 

function TPessoaFisicaHelper.isValidCPF(): Boolean;

begin

 WriteLn('CPF is valid');

end;

 

function TPessoaJuridicaHelper.isValidCNPJ(): Boolean;

begin

 WriteLn('CNPJ is valid');

end;

 

{ TPessoaHelper }

function TPessoaHelper.GetIdade: integer;

begin

  Result := YearsBetween(Self.DataNasc, Now);

end;

 

{ TIntHelper }

function TIntHelper.ToStr: String;

begin

  Result := IntToStr(Self);

end;

 

procedure TForm1.W3Button6Click(Sender: TObject);

var

  oPessoa: TPessoa;

begin

  oPessoa := TPessoa.Create;

  oPessoa.DataNasc := EncodeDate(19861126);

  WriteLn(oPessoa.Idade.ToStr);

  oPessoa.isValidCPF;

  oPessoa.isValidCNPJ;

end;

27

CPF is valid

CNPJ is valid