iLinker的Flex简单入门教程—Flex中类与类文件的关系
接着上次有关Flex中类重命名操作的讨论,我们接下来看一下Flex中类在文件中的组织关系。
在Flex中,一个.as文件只能创建一个类代码,我刚开始学Flex的时候不知道,还以为代码哪里写错了,因为我个人习惯在程序中把多个相关的类写在同一个文件中,比如在VS写C#代码时我就经常这样做。
OK,我们写一点小代码来看一下在Flex中是不是真的一个as文件只能保留一个类的代码;
为了方便我们继续用上次我们写好的Boys类(我们在上一次中把Boy改名为Boys了)。
Boys.as文件的代码
package iLinker
{
?import flash.events.Event;
???
?public class Boys
?{
??public var intAge:int;
??public var strName:String;
????
??public function Boys(name:String,age:int)
??{
???intAge=age;
???strName=name;
??}
??public function GrowUp():void
??{
???intAge+=1;
??}
?}
}
调用的MXML代码
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="init()">
<mx:Script>
?<![CDATA[
??import iLinker.Boys;
??private var oneBoy:Boys;
??
??private function init():void
??{
???oneBoy=new Boys("peter",10);
???txtName.text=oneBoy.strName;
??} ?
?]]>
</mx:Script>
<mx:Style source="defaults.css"/>
?<mx:TextInput id="txtName" x="59" y="10"/>
</mx:Application>
这些代码运行完全正确,我现在假设我需要在Boys.as文件中再增加一个Girls类,增加后代码如下:。
package iLinker
{
?import flash.events.Event;
?
?public class Girls
?{
??public var strNickName:String;
??
??public function Girls(nickName:String)
??{
???strNickName=nickName;
??}
?}
???
?public class Boys
?{
??public var intAge:int;
??public var strName:String;
????
??public function Boys(name:String,age:int)
??{
???intAge=age;
???strName=name;
??}
??public function GrowUp():void
??{
???intAge+=1;
??}
?}
}
增加完代码之后我不进行任何其他代码的更改,运行当前的MXML应用,发现Flex会弹出如下错误提示窗口:
刚开始我还以为是代码哪里错了,最后才发现Flex不能在同一个.as文件中同时存在两个类,这个后来我想了一下,可能跟上次我们讲的重命名类的名称这个操作有关系,因为如果一个文件对应一个类的话我们上次讨论的那个类重命名的操作功能才得以实现。
如上我们可以得到一个简单的结论:Flex中一个.as文件只能保存一个类,而且.as文件的名称必须和类名保持一致,如果不一致的会也会出现错误。
1 楼 oxromantic 2009-01-09 既然自己还在学习阶段,没有文档说明引用就不要乱下结论去看看ListCollectionView 2 楼 baoq 2009-01-09 两个类都是public 的!!! 3 楼 j2eefan 2009-01-09 实际上,你只说对了一半。先看代码:
package com.example {
public class Sample {
private var _helperClass:HelperClass = new HelperClass();
}
}
// imports for the private helper class go here
import com.example.xml.SaxHandler;
class HelperClass {
private var _saxHandler:SaxHandler;
}
所以应该这样说:在Flex中,一个.as文件只能创建一个public类代码(包含在package定义中的那个)。其他定义在package之外的,都是private类,只能被这个public类所引用。