使用公共getter的内部setter不起作用

时间:2011-07-13 09:27:19

标签: flash flex actionscript-3 flash-builder

我有一个问题,在AS3中使用Flash Builder 4使用带有内部setter的公共getter会给出错误“property is read only”,如下所示:

public function get aVar():int{ return _aVar; }
internal function set aVar(value:int):void { this._aVar = value; }

我使用了一种解决方法:

public function get aVar():int{ return _aVar; }
internal function setAVar(value:int):void { this._aVar = value; }

这似乎是AS3中的一个错误,或者我错过了什么?有谁知道更好的解决方法?

由于

4 个答案:

答案 0 :(得分:5)

Getter和Setter必须具有相同的访问类型,这不是错误。

答案 1 :(得分:2)

此问题已经提出,我已经提到了解决方法in my blog。问题在于绑定如何在Flex中工作,因为它需要在调度绑定事件之前比较值(默认情况下)。然而,解决方法很简单,但由于额外的代码而略显烦人:

// Internal Variable
private var __state:String = "someState";

// Bindable read-only property
[Bindable(event="stateChanged")]
public function get state():String
{
    return this._state;
}

// Internal Getter-Setter
protected function get _state():String
{
    return this._state;
}

protected function set _state(value:String):void
{
    this.__state = value;
    dispatchEvent(new Event("stateChanged"));
}

答案 2 :(得分:1)

据我所知,getter和setter必须相同,所以要么是公共的,要么是内部的。

我目前无法找到支持这方面的文档,尽管我在尝试混合使用公共和私有时曾遇到过类似的错误。

答案 3 :(得分:-1)

由于AS3中没有过载,因此在名称空间方面不会有任何歧义。访问者被视为属性,因此,作为任何属性,它不能同时受到保护和公开。在你的案例解决方案中,或许是使变量访问器设计为处理受保护(或内部),而getter - public(并且没有setter)。

// getter是publilc,setter是内部

 public string EmployeeCode  
 {
       // getter is publilc and setter is internal
       public string EmployeeCode
       {
          get 
          { 
            return _employeeCode; 
          }

          internal set
          {
             _employeeCode = value;
          }
       }
 }  

有一点要记住,你不能同时为getter和setter指定访问修饰符。另一个将始终采用属性的默认值。然而,这对我们来说并不重要,因为我们可以从可用的灵活性中获得任何组合。