Могу ли я рассматривать класс как тип объекта? - PullRequest
0 голосов
/ 08 сентября 2010

У меня есть пользовательский класс, скажем класс A :

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

}

Теперь у меня есть объект, скажем Объект C , у объекта точно такие же имена переменных и все, что и у класса.

Мой вопрос, могу ли я привести этот объект в класс или наоборот. Вместо установки / получения отдельных переменных.

Ответы [ 3 ]

1 голос
/ 08 сентября 2010

Вы можете попробовать отражение.См. эту статью .

0 голосов
/ 08 сентября 2010

К сожалению, нет.Правила типизации утки (если она похожа на утку и крякает как утка, то это должна быть утка) не применяются в AS3.Если объект явно не сконструирован как тип A, тогда классификационный тест не пройдёт по сравнению с универсальным объектом с такими же свойствами.Чтобы преобразовать дженерики в типизированные объекты, я всегда делал это:

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

for (var prop in obj) {
   if (a.hasOwnProperty(prop)) a[prop] = obj[prop];
}
0 голосов
/ 08 сентября 2010

Нет, вы не можете разыграть Object в Class, но, поскольку Class - это Object, вы можете поступить иначе, но помните, что доступ к члену из Class быстрее, чем к члену доступаиз Object.

Чтобы преобразовать Object в Class, вам нужно будет создать экземпляр Class, а затем скопировать каждое поле Object в это Class.Но будьте осторожны, они не будут одним и тем же экземпляром, это копия.

Чтобы сделать обратное, вам придется использовать descriptionType в Class, чтобы перечислить все открытые поля этого Class, а затем скопируйте значение в новый 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:String=field.@name.toString();
  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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...