2013-05-29 26 views
0

我讀的教程和用戶那裏已開始getter和setter方法,像這樣AS3:內聯方式寫get和set?

function get f():Number; 
    function set f(value:Number):void; 

的界面中,然後將其保存在主文件中的變量

var testNode:INode; 

,並引用它們作爲

testNode.f; 

我認爲這真的很方便,特別是當你有很多變數時。而不必爲每個私有值創建兩個函數。 但是,我試圖做同樣的事情沒有實例化get和設置內的接口(因爲我沒有這個需要),我得到一個錯誤,說該函數沒有一個正文。

這是爲什麼?有沒有什麼辦法可以用這麼簡潔的方式來寫入和設置?到目前爲止,我一直在寫這些作爲

public function get someVar():SomeClass { 
    return _someVar; 
} 

public function set someVar(newValue:SomeClass):void { 
    _someVar = newValue; 
} 

但當我有幾個私有變量時有點麻煩。

回答

1

接口只是您的類的模型,它不允許您跳過函數(或getter/setter)的定義。你必須在任何實現你的接口的類中聲明getter和setter。你正在尋找的是一個擴展(繼承)。

如果你定義了一個帶有getter和setter的Mother.as類,繼承Mother.as的類Child.as不需要重新定義getter和setter。此外,如果您不打算在getter和setter中寫入任何其他內容,則應該使用公共變量。這些比無用的獲取/設置資源消耗更少。

+1

嗨。我被教導總是將對象變量設置爲私有的,因爲它是良好的實踐和安全原因。這是不正確的? 另外,我知道擴展和接口如何工作。但是我正在閱讀的教程(http://www.untoldentertainment.com/blog/2010/08/20/introduction-to-aa-star-pathfinding-in-actionscript-3-as3-2/)將接口定義爲我解釋了它,並沒有用它擴展類。他們簡單地將其實例化並引用它,因爲我從來沒有將函數定義爲除函數以外的其他函數,所以函數get f():Number; function set f(value:Number):void; – user2347770

+0

你被教導的權利,但有時候,你不需要他們,特別是當優化受到威脅時。對於在接口中隱式聲明getter/setter的問題,這是我第一次在AS3中看到,我很抱歉... – Kodiak

+0

是的,對我來說也是一樣。從來沒有見過它(或使用這樣的接口),但顯然它工作...(已經嘗試過)。需要弄清楚爲什麼它需要在一個變量裏面,如果有辦法把它弄出來的話。感謝您的輸入! – user2347770