Acessar Propriedades de classe diferentes (Orientação a obj)
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
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
Curtidas 0
Respostas
Nildo
19/04/2005
Só vai funcionar se esse ValorDolar estiver na mesma posição nas duas classes, por exemplo:
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:
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?
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?
GOSTEI 0
Massuda
19/04/2005
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)...Daí, independente de um objeto ser TClasse1 ou TClasse2, isto é sempre válido:
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;
TClasseBase(Objeto).ValorDolar := ...;
GOSTEI 0
Nildo
19/04/2005
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
GOSTEI 0