Fórum duvida de iniciante #373767

19/08/2009

0

Qual é mesmo a diferenca entre o USES da interface e o USES da implementation ? Quero dizer qual a difenca em declarar uma unit entre estas 2 areas.

Obrigado


Felipeiw

Felipeiw

Responder

Post mais votado

19/08/2009

vamos supor que vc crie um unit MinhasClasses e aqui tem TMinhaClasse1, TMinhaClasse2

Agora vamos supor que vc adiciona um novo form no projeto....
se vc for declarar um metodo que utilize uma dessas classes por exemplo
Function GetClasse:TMinhaClasse1;

Para isto funcionar [b:fa93622e5d]obrigatoriamente[/b:fa93622e5d] tem q ser declarado MinhasClasses na [b:fa93622e5d]USES da interface[/b:fa93622e5d] .

Agora se vc fizer o seguinte
Function GetClasse:string;
begin
  result := TMinhaClasse1.Nome;
end;

Neste caso tanto faz se vc declarou na uses Interface ou Implementation.

--------------------------------------------
o bloco funciona visualmente assim

unit Unit1;

interface <---- tudo daqui p baixo pertence ao inteface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type <- tudo que usar aqui no type tem que estar
TForm1 = class(TForm) no uses da inteface (repare que o outro
private uses nem foi verificado ainda)
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses
MinhasClasses; <- Classes declaradas aqui não serão usadas daqui
para cima, e sim somente daqui p baixo
{$R *.dfm}

end.
------------------------------------------------------------------------

Desculpe, mas eu nao entendi. Abs



Osocram

Osocram
Responder

Gostei + 1

Mais Posts

19/08/2009

Osocram

Cada uses serve p o escopo dele....

´Estruturalmente´ dizendo:
Tudo que esta abaixo do uses é o escopo dele....

Explicando melhor Se vc vai usar uma variavel public no seu form (veja q essa declaração fica entre os 2 uses). Então ele esta dentro do escopo do primeiro uses mas esta fora do escopo do segundo. Então vc teria que declarar no primeiro uses.

Resumindo se vc quer usar classes somente nas implementações usa somente no segundo uses.
Se precisar da classe na Declaração tbm então usa no primeiro uses.

Basicamente é isso.
Tem o detalhe tbm da hora em que eles são instanciados. Mas não sei bem na teoria... so sei no Achometro como deve funcionar.

Mas o que puder declarar no segundo uses seria melhor.
Qual é mesmo a diferenca entre o USES da interface e o USES da implementation ? Quero dizer qual a difenca em declarar uma unit entre estas 2 areas. Obrigado



Responder

Gostei + 0

19/08/2009

Felipeiw

Desculpe, mas eu nao entendi.

Abs


Responder

Gostei + 0

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

Aceitar