碰到这样一个问题,使用了一个swc包,一个类中的某属性是只读的,但我又需要给其赋初始值,研究了用继承的方法解决了这个问题。
所谓只读属性,也就是说变量只有get方法,没有set方法,如下类:
如果想直接对test赋值,写 (new base()).test = "aaa",编译会报错:Multiple markers at this line: -Line breakpoint: child.as [line: 13] -1059: 属性是只读的。
这里用一个子类继承base,重写其get方法,并增加set方法,外部调用就OK了,子类如下:
上面的代码针对的是base类为库文件的情况,如果base有源码,那直接去base里加get就行了。这里用String作例子,实际一般应用于复杂类型的对象中。
所谓只读属性,也就是说变量只有get方法,没有set方法,如下类:
package
{
public class base
{
private var onestring:String = "frombase";
public function base()
{
}
public function get test():String
{
return onestring;
}
}
}
如果想直接对test赋值,写 (new base()).test = "aaa",编译会报错:Multiple markers at this line: -Line breakpoint: child.as [line: 13] -1059: 属性是只读的。
这里用一个子类继承base,重写其get方法,并增加set方法,外部调用就OK了,子类如下:
package
{
public class child extends base
{
private var test_:String;
public function child()
{
test_ = super.test; //非基本类型时,需要获取对象
this.test = "fromchild"; //可以赋值了
}
public override function get test():String
{
return test_;
}
public function set test(test:String):void
{
this.test_ = test;
}
}
}
上面的代码针对的是base类为库文件的情况,如果base有源码,那直接去base里加get就行了。这里用String作例子,实际一般应用于复杂类型的对象中。