2010-09-08 2 views
0

J'ai une classe classe personnalisée dire A:Puis-je traiter une classe comme un type d'objet?

class A 
{ 
    public testA:int; 
    public testB:int; 

} 

Maintenant, j'ai un objet dire Objet C, l'objet a le même nom exact de variables et tout comme la classe.

Ma question puis-je lancer cet objet en classe ou vice versa. Au lieu de définir/obtenir des variables individuelles.

Répondre

1

Vous pouvez essayer la réflexion. Voir this article.

+0

Depuis, j'utilise AMFPHP Je pense que la réflexion est la voie à suivre. Bien que je ne comprends pas encore complètement :) –

0

Non, vous ne pouvez pas lancer un Object dans un Class, mais comme un Class est un Object vous pouvez le faire dans l'autre sens, mais rappelez-vous que l'accès membre d'un Class est plus rapide que l'accès membre d'un Object.

Pour transformer un Object en Class vous devrez instancier le Class puis copiez chaque champ Object dans cette Class. Mais attention ils ne seront pas la même instance c'est une copie.

Pour faire l'inverse, vous devrez utiliser describeType sur le Class d'énumérer tout le domaine public de ce Class, puis copier la valeur dans une nouvelle Object.

// simple sample: 
class A { 
public var testA:int; 
public var testB:int; 
} 

function Object2A(o:Object):A { 
var ret:A = new A(); 
for (var fieldName:String in o) { 
    if (ret.hasOwnProperty(fieldName)) { 
    ret[fieldName] = o[fieldName]; 
    } 
} 
return ret; 
} 

import flash.utils.describeType; 

function A2Object(a:A):Object { 
var ret:Object = {}; 
var fields:XMLList=describeType(a).variable; 
for each(var field:XML in fields) { 
    var fieldName:[email protected](); 
    ret[fieldName]=a[fieldName]; 
} 
return ret; 
} 

var o:Object = {testA:12, testB:13}; 

var a:A = Object2A(o); // copy from object into class 

o=A2Object(a); // copy from class into object 
+0

Fondamentalement, j'essaye de ne pas placer individuellement les articles de classe. Demandé à la question, pour savoir s'il y a un moyen d'échapper à cela :) Merci pour l'aide cependant. –

0

Malheureusement, non. Les règles de dactylographie (si cela ressemble à un canard et à des charlatans comme un canard, alors ce doit être un canard) ne s'appliquent pas à AS3. Sauf si un objet est explicitement construit en tant que type A, un test de classification échouera par rapport à un objet générique ayant les mêmes propriétés. Pour convertir des génériques en objets typés, j'ai toujours fait ceci:

var obj = ((your generic object)) 
var a:A = new A(); 

for (var prop in obj) { 
    if (a.hasOwnProperty(prop)) a[prop] = obj[prop]; 
} 
Questions connexes