【发布时间】:2016-12-25 07:46:22
【问题描述】:
我对 Haxe 有点陌生,但我在 ActionScript 3 方面有很多经验。现在我正在将我的一个框架从 AS3 移植到 openfl,但我有点卡在 getter 和 setter 上。 一些框架组件扩展自 openfl.display.DisplayObject(准确地说是 Sprite),它已经定义了宽度和高度字段。但是在我的 ComponentBase 类中,我需要覆盖这些属性。 在 AS3 中,我是这样做的:
private var _width:Number = 0;
override public function get width():Number {
return _width;
}
override public function set width(value:Number):void {
_width = value;
}
但它在 Haxe 中不起作用。如果我这样做
override function get_width():Float {
return _width;
}
它不会编译,因为它需要一个物理字段。但我也无法重新定义宽度和高度值,因为它们已经在基类中定义。
您可能会问为什么我不使用基类中定义的值“宽度”和“高度”。那是因为有时我需要不通过 getter/setter 访问器而是直接访问这些变量。例如,我在宽度和高度设置器中调用了 layout() 方法,但我想多次计算它并且只调用一次 layout()。
现在我决定使用 Java 风格的 getter 和 setter 来完成工作,但这不是最好的方法。例如
public function setWidth(value:Float):Void {
_width = value;
}
所以,问题是:是否有可能让 Haxe getter 和 setter 使用一些名称与他们应该访问的名称不同的值?
【问题讨论】:
-
也许我遗漏了什么?如果父级使用 getter 实现该字段 - openfl.display.DisplayObject 对宽度执行此操作 - 覆盖 getter 确实有效:try.haxe.org/#e4d2c
标签: actionscript-3 setter haxe getter openfl