2

关于 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 回答 4

4

MXML 编译器不支持具有混合范围/命名空间的 getter 和 setter。有一些关于此的门票:

这很烦人,但至少 Adob​​e 意识到了这一点。有一种方法可以通过使用自定义命名空间和对 getter 或 setter 的完全限定引用来完成混合命名空间 getter 和 setter。

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;
       }
    }
  }
}
于 2011-03-29T01:50:58.310 回答
0

有没有原因

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

不工作?它给出了什么错误?我一直在 Flex 中这样做,所以我不确定它是否只在那里工作......不过我不这么认为。

编辑:看起来这是一个编译器错误。这是解决方案http://blogger.com/230/struggling-with-flex-error-1000-ambiguous-reference-to的博客文章

于 2011-03-28T22:32:27.400 回答
0

不理想,但你能创建一个私有方法吗?

于 2011-03-28T23:52:29.193 回答
0
> is there no way to use the set keyword
> on a private function?<br/>

不,如果一个是私人的,他们都必须是私人的。不管其他人认为这不是一个错误。

setter/getter 背后的想法是将代码public隔离。
记住这个 OOP
您还应该尝试使用带前导 _ 的 var 名称的典型约定

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


参考
所谓的错误报告在这里

于 2011-03-29T00:59:06.603 回答