我对Haxe很陌生,但我在ActionScript 3中有很多经验。现在我正在将我的一个框架从AS3移植到openfl,但我是有一种被吸气剂和吸附剂卡住。 一些框架组件从openfl.display.DisplayObject(准确地说是Sprite)扩展而来,它已经定义了宽度和高度的字段。但在我的ComponentBase类中,我需要重写这些属性。 在AS3我做这样的:如何在Haxe中正确地重写getter和setter
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;
}
它不会编译,因为它需要一个物理领域。但是我也无法重新定义宽度和高度值,因为它们已经在基类中定义了。
你可能会问为什么我不使用在基类中定义的值'width'和'height'。这是因为有时我需要直接访问这些变量,而不是通过getter/setter访问器。例如,我在宽度和高度设置器中调用了layout()方法,但是我想多次计算它并调用layout()一次。
现在我决定使用Java风格的getter和setter来完成工作,但这不是最好的方法。例如。
public function setWidth(value:Float):Void {
_width = value;
}
所以,问题是:是否有可能让Haxe getter和setter使用一些名称不同于他们应该访问的值?
也许我错过了什么?如果父级使用getter实现该字段 - openfl.display.DisplayObject对宽度执行的操作 - 覆盖getter确实可行:http://try.haxe.org/#e4d2c –