getter和setter方法

本質上是實例方法,但是在類的外部作爲屬性來訪問,它允許創建只讀和只寫屬性。 
使用: 
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(...){...},可以在函數體中處理其他的事情。
發佈了26 篇原創文章 · 獲贊 7 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章