免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1251 | 回复: 0
打印 上一主题 下一主题

actionscript中的getter,setter [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-21 08:44 |只看该作者 |倒序浏览
ActionScript 提供 getter 和 setter 以存取类的属性. 在 OOP 编程的角度, 是出于类的封装性考虑, 类的继承 (protected) 和私有化 (private) 的属性不能直接暴露在外, 外部只能通过存取方法访问和修改.

假设现在有一个去理发的女生, 年龄只有她自己知道, 发型师可以获知她的发质, 知道并可以改变她的发型. 那么 ActionScript 类可以定义如下:

  1. public class Lady {
  2.  
  3.     // 年龄
  4.     private var _age:int;
  5.  
  6.     // 发质
  7.     protected var _hairQuality:String;
  8.     public function get hairQuality():String {
  9.         return this._hairQuality;
  10.     }
  11.  
  12.     // 发型
  13.     private var _hairStyle:String;
  14.     public function get hairStyle():String {
  15.         return this._hairStyle;
  16.     }
  17.     public function set hairStyle(value:String):void {
  18.         this._hairStyle = value;
  19.     }
  20.  
  21.     public function Lady() {
  22.         this._age = 24;
  23.         this._hairQuality = "damaged";
  24.         this._hairStyle = "fashion";
  25.     }
  26.  
  27. }

由代码可以看出, 通过存取方法可以选择性地开放外部对属性的操作. 存取方法的写法也与一般的方法写法不同点在于 get 和 set 关键字. 一旦写为存取方法, 其调用方式将与常规方法不同, 将通过点运算符进行操作, 如:
  1. var lady:Lady = new Lady();
  2. if(lady.hairStyle == "gliding") {
  3.     lady.hairStyle = "fashion";//如果使用getter,setter则可以像访问public属性一样直接用
  4. }
另外, 使用存取方法还可以覆盖从超类继承来的属性, 这是常规类属性不能做到的, 可以对从超类继承的 getter 和 setter 方法使用 override 属性.

ActionScript 存取方法的思想和 C# 中 "域 (field)" 的概念几乎一样, 倡导开发者不使用 public 声明属性, 而通过 getter 和 setter 对外提供服务. 而 C# 要求同一个属性的 getter 和 setter 写在一起, 可以减少开发者遗漏和犯错.

或许因为我很长一段时间在敲 Java, 这种类似原型 (prototype) 的调用方式让我感到难受. 如果用 Java 对上面的 Lady 再写一遍, 会是这样的...
  1. public class Lady {
  2.  
  3.     // 年龄
  4.     private int _age;
  5.  
  6.     public Lady() {
  7.         this._age = 24;
  8.         this._hairQuality = "damaged";
  9.         this._hairStyle = "fashion";
  10.     }
  11.  
  12.     // 发质
  13.     protected String _hairQuality;
  14.     protected String getHairQuality {
  15.         return this._hairQuality;
  16.     }
  17.  
  18.     // 发型
  19.     private String _hairStyle;
  20.     public String getHairStyle() {
  21.         return this._hairStyle;
  22.     }
  23.     public void setHairStyle(String value) {
  24.         this._hairStyle = value;
  25.     }
  26.  
  27. }
Java 恨不得将所有属性设为继承和私有, 而通过对外的方法提供信息. 在外部调用时, 其调用方法与常规方法无异, 如果不是 JavaBean, 没有任何特殊要求. 好处是什么? 属性是属性, 方法是方法, 没有存取方法什么的这种特殊类型, 所以代码可以更加清晰易懂.

我是比较习惯 Java 的写法, 将会尝试将这种写法用在 ActionScript 中.

本文摘自:http://www.neoease.com/actionscript-keywords-get-and-set/

更详细的getter和setter可以参考官方文档:
http://help.adobe.com%2Fzh_CN%2FAction.%2F3.0_ProgrammingAS3%2FWS5b3ccc516d4fbf351e63e3d118a9b90204-7f30.html%23WS5b3ccc516d4fbf351e63e3d118a9b90204-7fcb
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP