Actionscript:在自己的构造函数中访问 private setter

Actionscript: Accessing private setter in own constructor

我试图设置一个变量,其 setter 在同一个 class 的构造函数中是私有的,但编译器一直在敲我的头:

1059 Property is readonly
1178: Attempted access of inaccessible property gesamtBetrag through a reference with static type ImmoObject.

package
{
    public class Huhu
    {
        private var _prop1:int;
        public function Huhu()
        {
            prop1 = 24;
        }

        public function get prop1():int
        {
            return _prop1;
        }

        private function set prop1(value:int):void
        {
            _prop1 = value;
        }

    }
}

我是不是漏掉了什么?

Getter/setter 必须具有相同的签名,否则它们根本不相关。你有一个 public getter 和一个私有的 setter,因此它们没有关系并且 public getter 没有 setter 所以它是只读的。

如前所述,您不能同时拥有 private setter 和 public getter。 getter 和 setter.

的访问修饰符必须相同

可以 做的只是有一个 public getter 并且从 class 构造函数或其他地方你设置 private直接变量:

class Foo {
    private var _prop:int;
    public function Foo() {
        _prop = 24;
    }
    public function get prop():int { return _prop; }
}

(请注意,在这种情况下,您实际上可以使用一个值 ex private _prop:int = 24 初始化私有变量。)

您还可以公开其他更改私有变量的方法,例如函数或具有不同名称的 setter:

class Foo {
    private var _prop:int;
    public function get prop():int { return _prop; }
    protected function setProp(prop:int):void {
        _prop = prop;
    }
    protected function set propValue(value:int):int {
        _prop = value;
    }
}

编辑:明确地说,访问类型必须匹配属性的getter/setters,但您可以混合使用private/public 访问 getter/setter 方法 ,风格类似于 Java:

private prop:int;
public getProp():int { return prop; }
private setProp(value:int):void {
    prop = value;
}

这不是您在 AS3 中看到的常见样式,因为我们有正式的 get/set 属性 语法,但它仍然完全有效。