我从未真正了解AS3的一件事是你不能拥有私有集方法和公共get方法。
从我的班级中我想分配可以调用私有集函数的值:
myNumber = 22
;
但我需要将该数字作为参数传递给函数
myNumber(22);
例如:
package
{
//Imports
import flash.display.Sprite
//Class
public class NumberClass extends Sprite
{
//Properties
private var myNumberProperty:Number
//Constructor
public function NumberClass(myNumber:Number):void
{
this.myNumber = myNumber;
init();
}
//Initialize
private function init():void
{
trace(myNumber);
}
//My Number Setter
private function set myNumber(value:Number):void
{
myNumberProperty = Math.max(0, Math.min(value, 100));
}
//My Number Getter
public function get myNumber():Number
{
return myNumberProperty;
}
}
}
是否无法在私有函数上使用set关键字?
答案 0 :(得分:4)
MXML编译器不支持具有混合范围/命名空间的getter和setter。有几张关于此的门票:
这很烦人,但至少Adobe意识到了这一点。有一种方法可以通过使用自定义命名空间和对getter或setter的完全限定引用来完成混合命名空间getter和setter。
package {
use namespace my_namespace
public class MyClass {
private var _name:String;
public function get name():String {
return _name;
}
my_namespace function set name(value:String):void {
_name = value;
}
}
public class MySubClass extends MyClass {
public function MySubClass(name:String) {
super.my_namespace::name = name;
}
}
}
}
答案 1 :(得分:0)
是否有原因
private function set myNumber(value:Number):void
{
myNumberProperty = value;
}
不起作用?它给出了什么错误?我在Flex中一直这样做,所以我不确定它是否只在那里工作......但我不这么认为。
编辑:看起来这是一个编译器错误。这是一篇包含解决方案http://blogagic.com/230/struggling-with-flex-error-1000-ambiguous-reference-to
的博客文章答案 2 :(得分:0)
不理想,但你能创建一个私有方法吗?
答案 3 :(得分:0)
> is there no way to use the set keyword
> on a private function?<br/>
不,如果一个人是私人的,他们都必须是私人的。不管其他人认为这不是一个错误
setter / getters背后的想法是隔离代码与 public 。
记住这个OOP
您还应该尝试使用前导_
private var _myNumber:Number
// private assessor/assignor
private function set number(value:Number):void{
this._myNumber= Math.max(0, Math.min(value, 100));
}
private function get number():void{
return this._myNumber;
}
// public assessor
public function get myNumber():Number{
return this._myNumber;
}