我有一个问题,在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中的一个错误,或者我错过了什么?有谁知道更好的解决方法?
由于
答案 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指定访问修饰符。另一个将始终采用属性的默认值。然而,这对我们来说并不重要,因为我们可以从可用的灵活性中获得任何组合。