GARANTIR DESCONTO

Fórum Trabalhando com Records e Propertys no Delphi 7 #535489

24/10/2015

0

Boa Tarde

Gostaria de saber se no delphi é possível essa abordagem

Tenho a classe
RDadosEndereco = record
    Rua        : string;
    Numero     : string;
    Complemento: string;
    Bairro     : string;
    Cidade     : string;
    Estado     : string;
  end;

TPessoa = class(TInterfacedObject,IClasseBase)
  private
    FNome          : string;
    FIdade         : integer;
    FDataNascimento: string;
    FDadosEndereco : RDadosEndereco;
    procedure SetNome(const Value: string);
    procedure SetDataNascimento(const Value: string);
    procedure SetIdade(const Value: integer);
    function GetDataNascimento: string;
    function GetIdade: integer;
    function GetNome: string;
    function GetEndereco: RDadosEndereco;
    procedure SetEndereco(const Value: RDadosEndereco);
  public
    property Nome : string read GetNome write SetNome;
    property Idade: integer read GetIdade write SetIdade;
    property DataNascimento: string read GetDataNascimento write SetDataNascimento;
    property DadosEndereco: RDadosEndereco read GetEndereco write SetEndereco;
    function ToString: string;


Qunado vou atribuir os valores nela
procedure Executar;
begin
     if(Pessoa = nil) then
       Pessoa := TPessoa.Create;

     Pessoa.Nome          := 'Lucas Riechelmann Ramos';
     Pessoa.Idade         := 27;
     Pessoa.DataNascimento:= '27/01/1988';

     with endereco do
     begin
          Rua         := 'Rua de Teste';
          Numero      := '123';
          Complemento := 'Apto 1';
          Bairro      := 'Bairro Teste';
          Cidade      := 'Cidade Teste';
          Estado      := 'Estado Teste';
     end;
     Pessoa.DadosEndereco := endereco;

     Leitura := '';
     WriteLn(Pessoa.ToString);
     ReadLn(Leitura);
     Pessoa.DadosEndereco.Rua         := 'Rua de Teste';
     {
     Pessoa.DadosEndereco.Rua         := 'Rua de Teste';
     Pessoa.DadosEndereco.Numero      := '123';
     Pessoa.DadosEndereco.Complemento := 'Apto 1';
     Pessoa.DadosEndereco.Bairro      := 'Bairro Teste';
     Pessoa.DadosEndereco.Cidade      := 'Cidade Teste';
     Pessoa.DadosEndereco.Estado      := 'Estado Teste';
     }
end;


Eu sou obrigado a criar um tipo o record endereco alimentar os valores e depois atribuir o endereco no DadosEndereco que é da minha classe pessoa, é possível armazenar diretamente como está comentado no exemplo:

Pessoa.DadosEndereco.Rua         := 'Rua de Teste';
Lucas Ramos

Lucas Ramos

Responder

Posts

24/10/2015

Marco Salles

tem alguns modos de fazer , um deles é por ponteiros

PRDadosEndereco = ^RDadosEndereco;

..........................................................................
TPessoa = class(TInterfacedObject,IClasseBase)

.......................................
   FDadosEndereco : PRDadosEndereco;

...................................................................

    function GetEndereco: PRDadosEndereco;
    procedure SetEndereco(const Value: PRDadosEndereco);

    property DadosEndereco: PRDadosEndereco read GetEndereco write SetEndereco;

.............................................................................
   constructor Create();
   destructor Destroy;


Implementation

constructor TPessoa.Create;
begin
  FDadosEndereco := AllocMem(sizeof(RDadosEndereco));
end;

destructor TPessoa.Destroy;
begin
FreeMem(FDadosEndereco);
end;


 if(Pessoa = nil) then
   Pessoa := TPessoa.Create;
.....................................................................
   with Pessoa.DadosEndereco^ do  ///////////Note a Utilização do Ponteiro
       begin
          Rua         := 'Rua de Teste';
          Numero      := '123';
          Complemento := 'Apto 1';
          Bairro      := 'Bairro Teste';
          Cidade      := 'Cidade Teste';
          Estado      := 'Estado Teste';
       end;

Responder

Gostei + 0

24/10/2015

Lucas Ramos

Obrigado marco, vou verificar aqui, estou me aprofundando no delphi por isso a dúvida.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar