Fórum Saber o ancestral da classe #287750

12/07/2005

0

Eu tenho algumas classes registradas no sistema.

Elas são organizadas da seguinte forma:
TFilho = class(TPai)
TNeto = class(TFilho)


Então eu declaro types
TFilhoClass = class of TFilho;


Na minha factory eu executo
var
  oClass: TFilhoClass;
begin
  oClass := TFilhoClass(GetClass(AClasse));


Agora a pergunta: eu gostaria de saber se a classe que eu achei é descente direto de TFilho ou de TPai?
Operadores como ´oClass is TFilho´ não funcionam.

Desde já obrigado.


Andremuller

Andremuller

Responder

Posts

12/07/2005

Ronaldo

Dá uma estudada neste exemplo:

procedure TForm1.Button1Click(Sender: TObject);
var
ClassRef: TClass;
begin
ListBox1.Clear;
ClassRef := Sender.ClassType;
while ClassRef <> nil do
begin
ListBox1.Items.Add(ClassRef.ClassName);
ClassRef := ClassRef.ClassParent;
end;
end;


Responder

Gostei + 0

12/07/2005

Beppe

Opa!

O método InheritsFrom(C) não precisa de uma instância.

if C.InheritsFrom(SuaClasse) then


Responder

Gostei + 0

12/07/2005

Kapak

Operadores como ´oClass is TFilho´ não funcionam.
Pq não funciona ? Se ele retorna false é pq oClass não é TFilho.


Responder

Gostei + 0

12/07/2005

Andremuller

não funciona porque oClass não é um objeto, é uma referência para uma class TFilhoClass que tá declarada no type.

Vou testar o InheritsFrom e depois posto o resultado no fórum

Valeu pessoal

Operadores como ´oClass is TFilho´ não funcionam. Pq não funciona ? Se ele retorna false é pq oClass não é TFilho



Responder

Gostei + 0

12/07/2005

Kapak

Tá certo o operador não é aplicável. E se fizer:
  if oClass = TFilho then
  ...
?


Responder

Gostei + 0

12/07/2005

Andremuller

também não dá porque a factory não conhece todas as classes que cria, todas as classes criadas não estão declaradas na uses.
Ela cria um monte de classes, algumas descentes de TPai e outras descentendes de TFilho.

pra fazer o que tu disse que teria que fazer, em alguns casos

Digamos o seguinte
TNeto´X´ = class(TFilho)
TFilho´X´ = class(TPai)

if oClasse = TNeto1 ...
else
if oClasse = TNeto2 ....
else
if oClasse = TFilho1

isso seria inviável


Responder

Gostei + 0

12/07/2005

Kapak

Mas se for utilizar o InheritsFrom, também não precisa colocar no uses ?
Outra opção seria usar a propriedade ClassName de oClass:
if SameText(oClass.ClassName, ´classex´) then


Responder

Gostei + 0

12/07/2005

Andremuller

Class name gera o mesmo problema do oClass = TFilho, eu teria que escrever todas as classes lá, o que não dá.

Meu problema é resolvido com o inheritsFrom

Valeu, pessoal


Responder

Gostei + 0

12/07/2005

Beppe

O ´uses´ é um recurso de compile-time, InheritsFrom é run-time, pode tudo.


Responder

Gostei + 0

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

Aceitar