4

AS3の多くのライブラリクラスには「読み取り専用」プロパティがあります。カスタムas3クラスでそのようなプロパティを作成することは可能ですか?つまり、公開したいすべてのプロパティに対して複雑なゲッター/セッターシステムを作成することなく、パブリック読み取りでプライベートセットを使用してプロパティを作成したいと思います。

4

4 に答える 4

6

読み取り専用にする唯一の方法は、AS3の組み込み関数getと関数を使用することです。set

編集: 元のコードは書き込み専用でした。読み取り専用の場合は、次のように使用する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;
于 2009-08-31T00:14:23.273 に答える
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"); }
}

}
于 2011-04-22T15:11:49.853 に答える
1

パブリックセットとプライベートゲットを同じ名前にすることはできません。しかし、Jamesが示したように、セッターの名前を別の名前に変更し、読み取り専用プロパティを取得するためにプライベートにすることができます。

于 2009-09-01T05:53:32.030 に答える
0

さらに簡単に、「getter」(パブリック関数get)を定義するだけで、「setter」(パブリック関数セット)は定義しません。そうすれば、誰かがそのプロパティに書き込もうとすると、Flashはエラーをスローします。上記のように、手動でエラーをスローする必要はありません。

于 2011-12-23T23:42:55.540 に答える