是否可以拥有一个带有公共(public) getter 和 protected setter 的属性?

我有以下代码:

public class Mob extends Sprite {
    // snip

    private var _health:Number; // tried making this protected, didn't work
    public function get health():Number { return _health; }
    protected function set health(value:Number):void {
        _health = value;
    }

    // snip

    public function takeDamage(amount:Number, type:DamageType, ... additionalAmountAndTypePairs):void {
        var dmg:Number = 0;
        // snip
        var h:Number = this.health; // 1178: Attempted access of inaccessible property health through a reference with static type components.mobs:Mob.
        this.health = h - dmg; // 1059: Property is read-only.
    }
}

我确实有 this.health -= dmg; 但我将其拆分以获取有关编译器错误的更多详细信息。

我不明白该属性如何在同一类中被视为只读。我也不明白它是如何无法访问的。

如果我使支持字段、getter 和 setter 都受到保护,它会编译,但这不是我想要的结果;我需要健康才能从外部读取。

最佳答案

不可以,访问者必须具有彼此相同的权限级别。你可以让你的公众号
获取 set 函数,然后有一个 protected setHealth、getHealth 函数对。如果您愿意,您可以反转它,但关键是您有一组方法可以以公共(public)权限访问,而另一组方法可以在 protected 权限级别访问。

关于flash - ActionScript 属性 - 公共(public) Getter、 protected Setter,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7356977/

10-13 08:50