2016-12-25 20 views
1

私はHaxeの新機能ですが、ActionScript 3では多くの経験があります。現在、私のフレームワークの1つをAS3からopenflに移植していますが、ゲッターやセッターにこだわったもの。 フレームワークコンポーネントの中には、既にwidthとheightのフィールドを定義している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'を使用しない理由を尋ねることがあります。これは、ゲッター/セッターアクセサではなく直接アクセスする必要がある場合があるためです。たとえば、幅と高さの設定子の中にlayout()メソッドを呼び出すことがありますが、何度も計算してレイアウト()を1回呼び出すだけです。

今はJavaスタイルのゲッターとセッターを使用してジョブを完成させることにしましたが、これは最良の方法ではありません。例えば。

public function setWidth(value:Float):Void { 
    _width = value; 
} 

だから、質問は:それはhaXeのゲッターとセッターは、それらがアクセスすることになっているとは異なる名前を持ついくつかの値を使用することが可能でしょうか?

+1

多分私に何かが不足していますか?親がgetterでフィールドを実装している場合は、getfltisplayDisplayObjectが幅のオーバーライドに対して機能します。http://try.haxe.org/#e4d2c –

答えて

3

申し訳ありませんが、私には何かが欠けていました。方法gettersとsettersはHaxeで正しく定義されています ここでBen Morrisの例を見てから、私はその点を得ました。 したがって、幅と高さのプロパティのほかに、オーバーライドするカスタムのものがあり、「物理フィールドエラーが見つかりません」というメッセージが表示されました。 get_/set_アクセサでプロパティを使用するだけでした。

// physical field 
public var top(get, set):Float; 
var _customTop:Float = 100; 

public function get_top():Float { 
    return _customTop; // now I can return what ever here 
} 
public function set_top(value:Float):Float{ 
    return _customTop = value; 
} 

私は私の質問をd​​ownvotedしているか分からないが、これは本当に私がのためのソリューションを取得しようと多くの時間を費やしてきた重要な問題です。それは本当に簡単でした。 ベン・モリスのおかげで!あなたのコメントを回答として投稿した場合、私はそれを受け入れるでしょう

+0

haxeのマニュアルを読むことができるのでおそらく下降しています10-15分のように、それはあなたが尋ねたことを実行する方法を明確に教えてくれます。私はそのような質問をするのは無礼だと思う(私はそれを捨てた人ではないが)。 – stroncium

+0

私はこれまでにドキュメントを読んだことがありますが、物理フィールドが本当に何であるかについての情報がなく、セッターが何らかの値を返す必要があるため、誤解を招くことがあります。私はAS3からHaxeに来ましたが、この小さな違いが私を最初に迷いました。だから私はここにこのスレッドを作成したので、そのコメントは私に問題の理解に役立ちました – Konstantin

関連する問題