Esse artigo faz parte da revista Clube Delphi Edição 93. Clique aqui para ler todos os artigos desta edição

e="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"> 

Mais como assim? Qualquer tipo de dado?

Imagine que a partir de agora os tipos de dados de seus parâmetros, por exemplo, podem ser definidos em runtime, acredita? É verdade caros amigos delphianos, e é exatamente isso que nos dará a flexibilidade para fazer coisas absurdas em nossa linguagem.

Para ficar mais claro vamos criar uma nova aplicação utilizando o menu File|New>VCL Forms Application – Delphi for .NET no CodeGear RAD Studio 2007 e desenhar a interface da Figura 1. Salve o formulário como “uPrincipal.pas” e modifique seu Name para “frmPrincipal”. O projeto salve como “Generics.dpr”. Em seguida vamos adicionar uma nova Unit utilizando o menu File|New>Other>Delphi for .NET Projects>New Files>Unit, para definir a estrutura presente na Listagem 1 e salve-a como “untPessoa.pas”.

Agora imaginem o seguinte exemplo: iremos definir um TList para manipular objetos. Essa classe dá suporte a qualquer tipo de objeto em uma mesma lista, porém temos muitos problemas de desempenho através de conversões implícitas. Para recuperar as informações da lista precisamos sempre utilizar o recurso de typecast para manipular os objetos, além disso, se definirmos uma lista, por exemplo, para manipular objetos de uma classe chamada TPessoa não conseguimos garantir que serão inseridos apenas objetos derivados dessa classe. Com isso podemos inserir qualquer objeto em uma lista do tipo TList e como não temos restrição do tipo adicionado se fizermos alguma besteira, só vamos saber em runtime no momento de manipular o objeto através do typecast.

 

Figura 1. Exemplo de tela para teste da classe TList

 

Listagem 1. Definição da classe TPessoa

unit untPessoa;

 

interface

  type

 

  TPessoa = class

  private

    FNome: string;

  public

    constructor Create(PNome:string);

    procedure setNome(const Value: string);

    property Nome:string read FNome write setNome;

  end;

 

implementation

 

constructor TPessoa.Create(PNome: string);

begin

  inherited Create;

  Nome := PNome;

end;

 

procedure TPessoa.setNome(const Value: string);

begin

  FNome := Value;

end; ...

Quer ler esse conteúdo completo? Tenha acesso completo