Ir para conteúdo
Fórum Script Brasil
  • 0

Pra Quem é Doido


Guest - Thales -

Pergunta

Guest - Thales -

Saudações!!!!!!! eu tava olhando outro dia a unit classes.pas..... lá tem a classe TStrings.... Eu fiquei um tempão analizando o código do cara pra entender como que ele fez uma classe que tu pode acessar um dado se colocar nome de nenhum campo...... apenas como se fosse um vetor, assim : Lines[2]:=Fala aew';.......alguém tem alguma idéia????

Eu ví que ele declara a classe uma vez sem nada dentro, assim->

TStrings = class;

....E Depois declara ela com os campos normais ->

TStrings = class(TPersistent)

{Campos}

{Campos}

{Campos}

{Campos}

Eu não entendí isso...

E tem uma tal de interface também ->

IStringsAdapter = interface

['{739C2F34-52EC-11D0-9EA6-0020AF3D82DA}]

procedure ReferenceStrings(S: TStrings);

procedure ReleaseStrings;

end;

Também não entendi isso.......

E também não entendí porque tem que criar assim -> TStringsInst:=TStringList.create; e não assim -> TStringsInst:=TStrings.create;

Muito Obrigado.

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Aí gente, Eu mesmo já descobrí. A classe TStrings tem uma propriedade padrão chamada Strings, veja ->

 property Strings[Index: Integer]: string read Get write Put; default;
Aí quando nós vamos acessar ela não é preciso colocar o nome ->
Lines.Strings[1]:='Qualé';
Lines[1]:='Qualé';
Os dois comandos aí são iguais. E também entendi porque não se pode instanciar a classe TStrings, é porque é uma classe com métodos abstratos, feita para se derivar outras classes. Só não entendi porque que ele declara antes desse jeito ->
TStrings = class;

Responde essa e a outra pergunta que eu fiz sobre os arquivos auto extraíveis, p****! :angry:

Link para o comentário
Compartilhar em outros sites

  • 0
Só não entendi porque que ele declara antes desse jeito ->

TStrings = class;

Não sei se o termo é este, mas parece-me que seja definição por antecipação. Observe o fragmento do código da unit Classes abaixo:

  ...
  TStrings = class;

{ TGetModuleProc }
{ Used in the TFormDesigner class to allow component/property editors access
  to project specific information }

  TGetModuleProc = procedure(const FileName, UnitName, FormName,
    DesignClass: string; CoClasses: TStrings) of object;

  IStringsAdapter = interface
    ['{739C2F34-52EC-11D0-9EA6-0020AF3D82DA}']
    procedure ReferenceStrings(S: TStrings);
    procedure ReleaseStrings;
  end;

{ TStrings class }

  TStringsDefined = set of (sdDelimiter, sdQuoteChar, sdNameValueSeparator);

  TStrings = class(TPersistent)
  private
    FDefined: TStringsDefined;
    FDelimiter: Char;
    FQuoteChar: Char;
    FNameValueSeparator: Char;
    FUpdateCount: Integer;
    FAdapter: IStringsAdapter;
  ...

Na segunda metade do fragmento, a classe TStrings tem uma propriedade FAdapter do tipo IStringsAdapter o qual na primeira metade do fragmento está declarado e utilizando a mesma classe TStrings em sua procedure ReferenceStrings. Note que se não houvesse a declaração antecipada, ao compilar a unit e passando pela declaração de IStringsAdapter ocorreria um erro, pois TStrings ainda não estaria definida. Da forma como foi implementada, o compilador entende que a classe TStrings está definida e não gera erro.

Não sei se consegui ser claro. Talvez algum outro colega possa ajudar.

[]s

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...