前言
最近一直在做Silverlight开发,因为技术的相关性,开始学习Flex/Flash。Silverlight需要掌握C#;同样,我们学习使用Flex/Flash,就需要了解跟它相关的语言——Action Script。本人是从Action Script3.0入门的,本文通过AS3与C#的对比来说明AS3的一些最基本的知识。(纯属个人见解)
一、类与文件
AS3中的类文件必须是.as文件。注意点:
1.一个文件中只能定义一个类,且类名必须要和文件名一致。
2.类是定义在Package中。跟C#中一个cs文件中可以定义多个类的要求较为严格。(个人觉得这样更好,从源头就要你规范。)
3.一个类最多只能有一个构造函数。
二、Package与NameSpace
NameSpace:
.NET Framework 使用命名空间(namespace)来组织它的众多类,使用namespace关键字可声明命名空间。在较大的编程项目中,声明自己的命名空间可以帮助控制类名称和方法名称的范围.使用using关键字引入需要的namespace,namespace也可以有自己的别名。
Package:
Package(包),通namespace相似,主要用于组织管理类,使用关键字import引入。但是,包是根据类所在的目录路径所构成的,并可以嵌套多层。包名所指的是一个真正存在的文件夹,用 “.”进行分隔。
例:
1 //定义包HelloFlex
2 package HelloFlex{
3 public class Person {
4 //...
5 }
6 }
7 //引入包
8 import HelloFlex.Person;
三、继承(Inheritance)、接口(Interface)
同C#不支持多重继承一样,AS3也不支持多重继承,但是可以实现多个接口。继承的语法和java相似:
1 package HelloFlex
2 {
3 public class Outman extends Person
4 {
5 public function Outman(obj:Object)
6 {
7 super(obj);
8 }
9 }
10 }
接口定义与实现:
1 package HelloFlex
2 {
3 public interface ISuperAction
4 {
5 function Fly():void;
6 }
7 }
8
9
10
11 package HelloFlex
12 {
13 public class Outman extends Person implements ISuperAction
14 {
15
16 public function Outman(obj:Object)
17 {
18 super(obj);
19 this._name = "Outman";
20 }
21
22 private var _name:String;
23
24 public override function get Name():String{
25 return this._name;
26 }
27
28 public function Eat():void{
29 //...TODO
30 }
31
32 //public function Eat(food:String):void{ error
33 //...TODO
34 //}
35
36 public function Fly():void{
37 //...
38 }
39 }
40 }
四、变量/属性定义
C#中变量和属性定义分别为:
1 private string _name = string.Empty;
2
3 public string Name
4 {
5 get { return _name; }
6 set { _name = value; }
7 }
但是在AS3中变量和属性的定义语法(Person.as):
1 private var _name:String;
2
3 public function set Name(name:String):void{
4 this._name = name;
5 }
6
7 public function get Name():String{
8 return this._name;
9 }
五、方法定义、overload,override
AS3.0中是不支持重载(overload)的。支持override(Outman.as):
1 private var _name:String;
2
3 public override function get Name():String{
4 return this._name;
5 }
六、动态语言
C#4.0以后开始支持动态语言,提供了dynamic关键字。AS3.0作为一个符合ECMA规范的脚本语言,也是支持动态语言的。我们再定义一个类Xman:
1 package HelloFlex
2 {
3 public dynamic class Xman extends Person
4 {
5 public function Xman(obj:Object)
6 {
7 super(obj);
8 }
9 }
10 }
使用:
1 var xman:Xman = new Xman({name:"xman"});
2 xman.Age = 10;
3 trace(xman.Name +":"+xman.Age);
刚刚学习Flex/Flash,大致的总结。