2007年1月14日星期日

2.3.创建成员属性


2.3. 创建成员属性

问题
我要创建public 成员属性
解决办法
使用隐含 getters 和 setters.
讨论

正如2.1节中所说的那样属性应该被申明为 private 或 protected。 public 属性并不是什么好主意,因为他不能体现封装性。要尽量做好封装,这意味着类不能暴露他的内部细节,public 属性使开发者能轻易破坏类或类实例。下面的简单例子是用了Public 属性:



package {
public class Counter {
public var count:uint;
public function Counter( ) {
count
= 0;
}

}

}



构造一个Counter实例, 然后改变count 属性值,如:
var counter:Counter = new Counter( );
counter.count++;
但是,如果count属性被规定不能超过100,那么外部修改很可能无法保证,这样破坏了这个规定,一个办法就是设置 getters 和 setters,如下:



package {
public class Counter {
private var _count:uint;
public function Counter( ) {
_count
= 0;
}

public function getCount( ):uint {
return _count;
}

public function setCount(value:uint):void {
if(value < 100) {
_count
= value;
}

else {
throw Error( );
}

}

}

}


另一个办法就是用隐式getters 和 setters. 隐式 getters 和 setters 就像申明方法那样,但是看起来又像属性getter 语法如下:
public function get name( ):Datatype {

}

setter 语法:
public function set name(value:Datatype):void {

}
下面定义隐式 getter 和 setter 方法:



package {
public class Counter {
private var _count:uint;
public function Counter( ) {
_count
= 0;
}

public function get count( ):uint {
return _count;
}

public function set count(value:uint):void {
if(value < 100) {
_count
= value;
}

else {
throw Error( );
}

}

}

}


counter.count = 5;
trace(counter.count);


没有评论: