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;
}
}
}
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( );
}
}
}
}
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( );
}
}
}
}
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);
没有评论:
发表评论