使用:
getter方法:必須有返回類型,且和要訪問的私有屬性類型一致。必須有返回語句,返回要訪問的私有屬性。
setter方法:必須要有參數,且參數類型要和訪問的私有屬性類型一致,返回類型爲void,要有賦值語句。
--------------------------------------------------------------------------------
好處:①獨特的訪問控制能力。訪問getter和setter創建的方法可以像訪問屬性一樣方便。而且還可以做其他的事情,比如例子中每次訪問hello時,都會使gettimes增加1:
GetterAndSetter.as:
package
{
public class GetterAndSetter
{
private var _realHello:String = "Hello,flash!";
public var gettimes:int = 0; //讀取計數
public var settimes:int = 0; //設置計數
public function get hello():String
{
gettimes++;
return _realHello;
}
public function set hello(ns:String):void
{
settimes++;
_realHello = ns;
}
}
}
文檔類Sample.as:
package
{
import flash.display.Sprite;
public class Sample extends Sprite
{
public function Sample()
{
var foo:GetterAndSetter = new GetterAndSetter();
trace(foo.hello); //輸出Hello,flash!
foo.hello = "Hi,ActionScript3";
trace(foo.hello); //輸出Hi,ActionScript3
trace(foo.gettimes); //輸出2
trace(foo.settimes); //輸出1
}
}
}
②隱藏了類的實現細節。根據封裝思想,將屬性直接暴露在外部是不好的做法,儘量通過getter和setter方法來訪問屬性。
③在getter和setter方法中可以插入額外的代碼邏輯,易於日後修改和擴展,如上例中的gettimes和settimes。
④用來綁定數據等。比如設置個變量爲public類型用來在外部調用,如果想更改這個變量的值並進行相關的一系列處理就會比較麻煩,比如凡是調用這個變量的地方全部都要重新改,採用EnterFrame偵聽來檢查數據是否發生了變化顯然不好。如果使用getter和setter只要更改這兩個方法就可以了。
⑤訪問類的屬性而不需要將這個類公開,比如有個container內部有個rect_mc,如果想在container外部獲取rect_mc的高度,總不能將container設爲public,通過
public function get rect_mc.Width():Number
{
return rect_mc.width;
}就可以訪問了。
⑥給類添加只讀和只寫屬性。方便修改類的私有成員屬性。
⑦Interface的屬性只能使用方法,所以必須使用getter/setter設定。
--------------------------------------------------------------------------------
理解:可以理解成是一種屬性的函數(方法)應用,即按屬性方式 函數(方法)處理和包裝,方便捕獲事件和獲取想要的結果。
另外,setter方法不一定要和該類中的某個成員變量聯繫一起,比如public function set doOtherThing(...){...},可以在函數體中處理其他的事情。