flex只读属性的赋值

碰到这样一个问题,使用了一个swc包,一个类中的某属性是只读的,但我又需要给其赋初始值,研究了用继承的方法解决了这个问题。

    所谓只读属性,也就是说变量只有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作例子,实际一般应用于复杂类型的对象中。

你可能感兴趣的:(Flex)