在Actionscript 3中创建只读属性

时间:2009-08-31 00:05:02

标签: actionscript-3 properties readonly

AS3中的许多库类都具有“只读”属性。是否可以在自定义as3类中创建此类属性?换句话说,我想创建一个带有公共读取但是私有集的属性,而不必为我想要公开的每个属性创建一个复杂的getter / setter系统。

4 个答案:

答案 0 :(得分:6)

只读的唯一方法是使用AS3的内置getset函数。

编辑:原始代码仅供写入。如需阅读,请使用get代替set,如下所示:

package
{

import flash.display.Sprite;

public class TestClass extends Sprite
{
    private var _foo:int = 5;

    public function TestClass() {}

    public function get foo():int{ return _foo; }
    public function incrementFoo():void { _foo++; }
}

}

允许您像这样访问foo:

var tc:TestClass = new TestClass();
trace(tc.foo);

tc.incrementFoo();
trace(tc.foo);

以下是仅供写作参考的原件:

package
{

import flash.display.Sprite;

public class TestClass extends Sprite
{
    private var _foo:int;

    public function TestClass() {}

    public function set foo(val:int):void{ _foo = val; }
}

}

这将允许您在外部设置_foo的值,如下所示:

var tc:TestClass = new TestClass();
tc.foo = 5;

// both of these will fail
tc._foo = 6;
var test:int = tc.foo;

答案 1 :(得分:1)

您不能使用相同名称的公共集和私有。但正如James所示,你可以将setter重命名为其他东西并将其设为私有以获得只读属性。

答案 2 :(得分:1)

你不能这样做吗?

package
{

import flash.display.Sprite;

public class TestClass extends Sprite
{
    private var _foo:int = 5;

    public function TestClass() {}

    public function get foo():int{ return _foo; }
    public function set foo(value:int):void{ throw new Error("The variable foo is read-only"); }
}

}

答案 3 :(得分:0)

更简单,只需定义“getter”(公共函数get),而不是“setter”(公共函数集)。这样,如果有人试图写入该属性,Flash将抛出错误。无需手动抛出任何错误,如上所述。