AS3 Динамический класс, который принимает только данный тип - PullRequest
3 голосов
/ 18 августа 2011

Можно ли сделать так, чтобы класс dynamic в AS3 принимал только динамически созданные свойства, если они имеют заданный тип?

Например, я могу только разрешить использование спрайтов. Итак, возьмем этот пример быстрого класса:

public dynamic class Test extends Object{}

-------

И несколько быстрых строк, чтобы понять, что я имею в виду:

var test:Test = new Test();

test.something = 32; // error
test.something = "party hats"; // error
test.something = new Sprte(); // works

Может быть, с использованием прокси-класса / пространства имен есть способ манипулировать всем, что запускается, при динамическом создании переменных?

1 Ответ

10 голосов
/ 18 августа 2011

Тестовый класс:

package classes {
    import flash.display.Sprite;
    import flash.utils.Proxy;
    import flash.utils.flash_proxy;

    public dynamic class Test extends Proxy {
        private var _properties : Object;

        public function Test() {
            _properties = new Object();
        }

        override flash_proxy function getProperty(name : *) : * {
            return _properties[name];
        }

        override flash_proxy function setProperty(name:*, value:*):void {
            if (!(value is Sprite)) throw new Error("No Sprite given: " + value);       
            _properties[name] = value;
        }
    }
}

Приложение:

package classes {
    import flash.display.Sprite;

    public class TestTest extends Sprite {
        public function TestTest() {
            var test:Test = new Test();

            try {
                test.something = 32; // error
            } catch (e : Error) {
                trace (e);
            }

            try {
                test.something = new Sprite(); // works
            } catch (e : Error) {
                trace (e);
            }

            trace (test.something);
        }
    }
}

Выход:

Error: No Sprite given: 32
[object Sprite]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...