GARANTIR DESCONTO

Fórum Acessar Propriedades de classe diferentes (Orientação a obj) #277878

19/04/2005

0

Se eu tenho 2 classes TClasse1 e TClasse2, ambas herdadas de TComponent. Na classe 1 tenho várias propriedades e funções criadas totalmente diferentes das criadas na TClasse2. Apenas 1 propriedade chamada ValorDolar é idêntica em âmbas as classes. Eu preciso atribuir um valor para ambas as classes nesta mesma propriedade... Pergunta:


Posso utilizar uma única classe como referência para fazer a atribuição?
Ex. Utilizando a mesma classe (Apenas TClasse1) e mudando a referência
TClasse1(fParent1).ValorDolar:= 1;
TClasse1(fParent2).ValorDolar:= 5;

OU ENTÃO sou OBRIGADO a seguir desta forma abaixo?:
if fParent1.ClassType = TClasse1 then
TClasse1(fParent1).ValorDolar:= 1
else
TClasse2(fParent2).ValorDolar:= 5;



Obrigado


Mcd

Mcd

Responder

Posts

19/04/2005

Nildo

Só vai funcionar se esse ValorDolar estiver na mesma posição nas duas classes, por exemplo:

TClasse1 = class( tcomponent )
public
   Teste: string;
   QualquerCoisa: Integer;
   ValorDolar: Integer;
end;

TClasse2 = class( tcomponent )
public
   VarQualquer: string;
   Outra: Integer;
   ValorDolar: Integer;
end;


Desta maneira funciona pois o compilador do Delphi ja prepara o código para quando você usar [b:fa6cf6e975]TClasse( Variavel_Classe2 ).ValorDolar[/b:fa6cf6e975], ele sabe que tem que atribuir o valor na posição absoluta do ValorDolar dentro da classe.

Agora, se a posição do ValorDolar não estiver no mesmo local nas duas classes, você não pode usar o método que você citou. Exemplo:


TClasse1 = class( tcomponent )
public
   QualquerCoisa: Integer;
   ValorDolar: Integer;
end;

TClasse2 = class( tcomponent )
public
   VarQualquer: string;  // <-- repare que tem essa variavel a mais
   Outra: Integer;
   ValorDolar: Integer;
end;


Quando você utilizar [b:fa6cf6e975]TClasse( Variavel_Classe2 ).ValorDolar[/b:fa6cf6e975], você vai estar atribuindo na variavel [b:fa6cf6e975]Outra[/b:fa6cf6e975] da Variavel_Classe2, pois o [b:fa6cf6e975]ValorDolar[/b:fa6cf6e975] da TClasse1 é a segunda variavel (em posição absoluta seria +/- o quarto byte), que na TClasse2, essa posição é a variavel [b:fa6cf6e975]Outra[/b:fa6cf6e975]

Entendeu?


Responder

Gostei + 0

19/04/2005

Massuda

Eu não conheço o domínio do seu problema, mas uma alternativa é ter uma classe base com o valor do dólar (pegando o exemplo do Nildo)...
TClasseBase = class(TComponent)
public 
   ValorDolar: Integer; 
end; 

TClasse1 = class(TClasseBase) 
public 
   Teste: string; 
   QualquerCoisa: Integer; 
end; 

TClasse2 = class(TClasseBase) 
public 
   VarQualquer: string; 
   Outra: Integer; 
end;
Daí, independente de um objeto ser TClasse1 ou TClasse2, isto é sempre válido:
TClasseBase(Objeto).ValorDolar := ...;



Responder

Gostei + 0

19/04/2005

Nildo

Daí, independente de um objeto ser TClasse1 ou TClasse2, isto é sempre válido:
TClasseBase(Objeto).ValorDolar := ...;


Perfeito!

Só complementando: Desta maneira, a posição absoluta de ValorDolar será sempre o mesmo para todas as classes que descendem dela. Por isso vai funcionar


Responder

Gostei + 0

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

Aceitar