ActionScript - Свойство только для чтения и метод закрытого набора? - PullRequest
2 голосов
/ 29 марта 2011

Одна вещь, которую я никогда не понимал в AS3, это то, что вы не можете иметь приватный метод set и публичный метод get вместе.

из моего класса, я хотел бы присвоить значения, которые быфункция закрытого набора:

myNumber = 22;

, но мне нужно передать это число в качестве параметра функции

myNumber(22);

, например:

package
{
//Imports
import flash.display.Sprite

//Class
public class NumberClass extends Sprite
    {
    //Properties
    private var myNumberProperty:Number

    //Constructor
    public function NumberClass(myNumber:Number):void
        {
        this.myNumber = myNumber;

        init();
        }

    //Initialize
    private function init():void
        {
        trace(myNumber);
        }

    //My Number Setter
    private function set myNumber(value:Number):void
        {
        myNumberProperty = Math.max(0, Math.min(value, 100));
        }

    //My Number Getter
    public function get myNumber():Number
        {
        return myNumberProperty;
        }
    }
}

нет ли способа использовать ключевое слово set в приватной функции?

Ответы [ 4 ]

4 голосов
/ 29 марта 2011

Компилятор MXML не поддерживает методы получения и установки со смешанными областями / пространствами имен.Есть несколько открытых билетов по этому поводу:

Это довольнораздражает, но по крайней мере Adobe знает об этом.Существует способ создания смешанных методов получения и установки пространства имен с помощью пользовательских пространств имен и полностью квалифицированных ссылок на метод получения или установки.

package {

    use namespace my_namespace

    public class MyClass {

        private var _name:String;

        public function get name():String {
            return _name;
        }

        my_namespace function set name(value:String):void {
            _name = value;
        }
     }

     public class MySubClass extends MyClass {

       public function MySubClass(name:String) {
           super.my_namespace::name = name;
       }
    }
  }
}
0 голосов
/ 29 марта 2011

Не идеально, но не могли бы вы создать приватный метод?

0 голосов
/ 29 марта 2011
> is there no way to use the set keyword
> on a private function?<br/>

Нет. Если кто-то частный, они оба должны быть частными.Независимо от того, что другие думают, это не ошибка.Идея сеттеров / геттеров состоит в том, чтобы изолировать код от публичного Запомни это ООПВы должны также попытаться придерживаться типичного соглашения для имени переменной с начальным _

private var _myNumber:Number

// private assessor/assignor 
  private function set number(value:Number):void{
    this._myNumber= Math.max(0, Math.min(value, 100));
  }
  private function get number():void{
    return this._myNumber;
  }


// public assessor
  public function get myNumber():Number{
    return this._myNumber;
  }

см * * +1010 Здесь находится так называемый отчет об ошибке

0 голосов
/ 29 марта 2011

Есть ли причина

private function set myNumber(value:Number):void
{
    myNumberProperty = value;
}

не работает? Какую ошибку это дает? Я делал это все время во Flex, поэтому я не уверен, работает ли он там только ... Хотя я бы так не думал.

edit: Похоже, это ошибка компилятора. Вот сообщение в блоге с решением http://blogagic.com/230/struggling-with-flex-error-1000-ambiguous-reference-to

...