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