我正在尝试通过公开扩展分类和set
来创建可以read
的属性。
我无法想到protected
具有public
getter的属性的良好命名约定,所以我尝试这样做:
public function get name():String{ return _name; }
protected function set name(string:String):void
{
_name = string;
}
但是我收到了错误(在扩展课程中尝试set
name
时):
1178:尝试通过a访问无法访问的属性名称 静态类型测试的参考:TestComponent。
1059:财产是只读的。
如果我将设置器更改为public
,则可以正常工作。
答案 0 :(得分:4)
据我所知,AS3不允许混合和匹配,两个访问器应该是相同的。
我通常不提供setter来使属性只读,并在内部直接设置_name
。因为它受到保护,所以后代可以访问它。
答案 1 :(得分:1)
您可以像下面一样使用它。
public class Test extends Object {
protected var _name:String;
public function get name():String {return _name;}
}
public class Test2 extends Test {
public function set name(s:String):void {
this._name = s;
}
}
答案 2 :(得分:1)
我采用了一种略微不同的方法来实现我想要的目标:
public function get name():String{ return _name; }
public function set name(string:String):void
{
if(!_name.length)
_name = string;
else throw new Error("Property \"name\" can only be defined once.");
}
现在name
将在扩展类中定义,但从那时起就无法设置。