AS3 Getter和配套设置器在不同的命名空间中

时间:2011-10-11 11:11:13

标签: actionscript-3 getter-setter

我正在尝试通过公开扩展分类和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,则可以正常工作。

3 个答案:

答案 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将在扩展类中定义,但从那时起就无法设置。