2009-11-02 5 views
0

Existe-t-il un moyen d'obtenir des données objet à partir de sa procédure ou de sa fonction de classe sans l'instancier?Obtenir des données d'objet à partir d'une classe Procédure ou Fonction?

+1

Que voulez-vous dire exactement? Votre question est un peu vague, et un exemple aiderait. –

+0

Si vous avez des informations spécifiques que vous espérez trouver sur un objet, essayez de poster une nouvelle question en disant ce que vous voulez vraiment. –

Répondre

0

Je ne suis pas sûr que ce soit ce que vous parlez, mais ...

type 
    tmyclasstype = class of tmyclass; 

    tmyclass = class(TObject) 
    class function a:integer; 
    class function b:tmyclass; 
    class function c:tmyclasstype; 
    end; 

... 

class tmyclass.function a:integer; 
begin 
    result := 0; 
end; 

class tmyclass.function b:tmyclass; 
begin 
    result := tmyclass.create; 
end; 

class tmyclass.function c:tmyclasstype; 
begin 
    result := tmyclass; 
end; 

IIRC, ce sont tous des exemples valides de méthodes de classe. Tout le reste n'est pas valide car vous ne pouvez accéder à aucune structure, variable ou méthode non-classifiée d'un objet sans l'instancier.

0

Pour ajouter à la réponse de Ryan, vous pouvez appeler les fonctions de classe sans instanciation d'objets tels que celui-ci:

var 
    MyInt: Integer begin 
begin 
    MyInt := TMyClass.a; 
2

Vous semblez avoir eu tort: ​​

  • Les classes sont les spécifications sur la façon dont les données est disposé dans la mémoire, y compris le code, mais pas de données.
  • Les objets sont des instances, c'est-à-dire des données en mémoire, associées à un type.
  • Les méthodes de classe sont des méthodes qui ont accès aux informations de classe, mais qui n'ont pas accès aux données ou aux instances. De cette façon, ils peuvent être appelés sans instanciation.

Sans instanciation, il n'y a pas de données et vous ne pouvez pas accéder aux données si elles n'y figurent pas.

0

Essayez d'utiliser quelque chose comme ça:

fClass := TComponentClass(GetClass(fNode.NodeName)); 
fControl := TControl(fClass.NewInstance); 
fControl.Create(...)