Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Создать класс во время выполнения. (http://www.flasher.ru/forum/showthread.php?t=171372)

stweet 14.11.2011 23:36

Создать класс во время выполнения.
 
Я явно что то делаю не так, укажите на ошибку.

Код AS3:

function event (e:Event):void
{
    trace(e.target.content); // [object Object] ==> { object:{ name:'name', id:0 }, object:{ name:'newxName', id:1 } } тут приходит список объектов.
 
    var my_class:MyClass = e.target.content[0] as MyClass;
 
    trace(my_class); // null
}

Код AS3:

class MyClass {
    public function MyClass ()
    {
        private var _id:int;
        private var _name:String;
    }
}

Заранее благодарен.

Wolsh 15.11.2011 00:19

Неужели компилятор Вам не объясняет, что внутри метода не может указываться модификатор доступа?
Да и что Вы вообще хотели? У Обжекта свойства public. И это MyClass расширяет Object, а не наоборот, так что as обязан вернуть null.

stweet 15.11.2011 00:51

Спасибо.

Добавлено через 1 час 23 минуты
Код AS3:

trace(e.target.content.source[0]); // [object Object]
var vo:UserVO = e.target.content.source[0] as UserVO; trace(vo); // null

Код AS3:

package {
        public class UserVO extends Object {
                public function UserVO () { }
        }
}

блин, может до меня туго доходит, но чёт ни фига не пойму. Почему всё равно ноль?

in4core 15.11.2011 02:39

потому что
Код AS3:

e.target.content.source[0]

не UserVO - что тут можно не понять?

Код AS3:

var d:Dictionary = new Dictionary(true);
d['someClass'] = new UserVO();
trace(d['someClass'] as UserVO) // профит


Wolsh 15.11.2011 03:40

Ну не знаю.. Вы эту тему читали? Вы поймите, что экземпляр Обжект никогда не станет экземпляром UserVO. Вообще никогда. Это разные уровни абстракции. Любой UserVO это Обжект, но Обжект это не UserVO. Джинсы это Штаны, но Штаны это не Джинсы.
Не пытайтесь тут кастовать, Ваши Обжекты не станут никакими другими классами. Создавайте новый экземпляр UserVO на основе полученного из массива Обжекта.
Код AS3:

function event (e:Event):void
{
        trace(e.target.content);
        var userInfo:UserVO = new UserVO (e.target.content[0]);
        trace(userInfo);
}
 
package {
        public class UserVO extends Object
        {
                  public var name:String;
                  public var id:String;
                public function UserVO (info:Object)
                  {
                          this.name = info.name;
                          this.id = info.id;
                  }
        }
}


stweet 15.11.2011 17:04

Цитата:

Сообщение от Wolsh (Сообщение 1046112)
Не пытайтесь тут кастовать, Ваши Обжекты не станут никакими другими классами. Создавайте новый экземпляр UserVO на основе полученного из массива Обжекта.

Я так и сделал, других вариантов не нашёл. Спасибо огромное за участие.


Часовой пояс GMT +4, время: 14:17.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.