Actionscript 3 不同名称空间中的AS3 Getter和companion setter

Actionscript 3 不同名称空间中的AS3 Getter和companion setter,actionscript-3,getter-setter,Actionscript 3,Getter Setter,我试图通过扩展classed和read来创建一个可以设置的属性 我想不出一个具有公共getter的受保护属性的好命名约定,所以我尝试这样做: public function get name():String{ return _name; } protected function set name(string:String):void { _name = string; } 但是,我得到了错误(在扩展类中尝试设置名称时): 1178:尝试通过访问访问不可访问的属性名称 静态类型测试参

我试图通过扩展classed和
read来创建一个可以设置的属性

我想不出一个具有
公共
getter的
受保护
属性的好命名约定,所以我尝试这样做:

public function get name():String{ return _name; }
protected function set name(string:String):void
{
    _name = string;
}
但是,我得到了错误(在扩展类中尝试设置
名称时):

1178:尝试通过访问访问不可访问的属性名称 静态类型测试参考:TestComponent。

1059:属性是只读的


如果我将setter更改为
public
,它可以正常工作。

据我所知,AS3不允许您混合和匹配,两个访问器应该是相同的


我通常不提供setter使属性为只读,而是直接在内部设置
\u name
。因为它是受保护的,所以后代可以访问它。

据我所知,AS3不允许您混合和匹配,两个访问器应该是相同的


我通常不提供setter使属性为只读,而是直接在内部设置
\u name
。因为它是受保护的,所以子代可以访问它。

您可以像下面那样使用它

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

你可以像下面那样使用它

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

我采取了一种稍微不同的方法来实现我想要的:

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

我采用了一种稍微不同的方法来实现我想要的:

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

这个类是否扩展了任何具有属性“name”的类?@ymutlu-Nope,扩展了
Object
。我添加了答案,希望有帮助。这个类是否扩展了任何具有属性“name”@ymutlu-Nope,扩展
对象
。我添加了答案,希望能有所帮助。是的,很好。我有点想避免我对私密者使用的命名约定,虽然开头是
-只是为了让我的扩展类更整洁,也就是说,我可以只做
name=“blah”
是的,很好。有点想避免我对私密者使用的命名约定,尽管开头是
-这样我的扩展类就更整洁了,也就是说,我可以只做
name=“blah”