Создание свойств только для чтения в Actionscript 3 - PullRequest
4 голосов
/ 31 августа 2009

Многие библиотечные классы в AS3 имеют свойства «только для чтения». Можно ли создать такие свойства в пользовательских классах as3? Другими словами, я хочу создать свойство с общедоступным чтением, но закрытым набором, без необходимости создавать сложную систему получения / установки для каждого свойства, которое я хочу предоставить.

Ответы [ 4 ]

6 голосов
/ 31 августа 2009

Единственный способ иметь только чтение - использовать встроенные функции get и set в AS3.

Редактировать: исходный код был только для записи. Только для чтения, используйте 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 голос
/ 22 апреля 2011

Ну разве ты не можешь так поступить?

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"); }
}

}
1 голос
/ 01 сентября 2009

Вы не можете иметь публичный набор и приватный доступ с одним и тем же именем. Но, как показал Джеймс, вы можете переименовать сеттер во что-то другое и сделать его приватным, чтобы получить свойство только для чтения.

0 голосов
/ 24 декабря 2011

Еще проще, просто определить «getter» (публичная функция get), но НЕ «setter» (публичная функция set). Таким образом, Flash выдаст ошибку, если кто-то попытается записать в это свойство. Нет необходимости выкидывать ошибки вручную, как указано выше.

...