【问题标题】:AS3 Dynamic class that only accepts a given type仅接受给定类型的 AS3 动态类
【发布时间】:2011-10-29 12:04:11
【问题描述】:

是否可以让 AS3 中的 dynamic 类只接受给定类型的动态创建的属性?

例如,我可能只希望允许精灵。因此,以这个快速示例类为例:

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

也许使用代理类/命名空间有一种方法可以在动态创建变量时操纵运行的任何内容?

【问题讨论】:

    标签: actionscript-3 actionscript dynamic


    【解决方案1】:

    测试类:

    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]
    

    【讨论】:

    • 你打败了我!不错的答案:)
    • 太棒了,知道它是这样的。干杯!
    • 奇怪的是 flash_proxy 命名空间及其位置仅在 Proxy 类文档的示例中提及。由于它是必需的,我有点惊讶它没有列在 flash.utils 包的自己的命名空间类别(如函数、接口和类)下。
    猜你喜欢
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    • 1970-01-01
    相关资源
    最近更新 更多