Pages

2012年8月26日 星期日


AS3.0 重載

本文轉自 http://www.2solo.cn/log/article.asp?id=508


注:本文为frank的学习笔记,转载请注明原文链接
更多笔记请参看:http://www.2solo.cn/log/article.asp?id=87
首先需要申明的一点是:在As3.0中仍然不支持方法重载,我们只能通过简单的模拟来实现重载.我在网上看到有不少人把override称为重载,这是不对的.事实上override提供给子类来定义替换继承的方法的,从动作上理解只是覆盖。而方法重载的原本定义为通过传入不同的参数来实现调用不同的方法.这两个是决然不可混为一谈的.
要说重载概念在As3中的实现却是很简单的.主要利用函数的...(rest)来支持不定量参数来传递参数,不清楚的可以看我这篇笔记.看我下面写的一个示例:
/*@
Author:frank
Site:www.2solo.cn
Date:2008.01.31
Info:测试重载
*/

package {
    import flash.display.Sprite;

    public class OverLoadSample extends Sprite {
        private var paramA:Number=1;
        private var paramB:String="1";
        private var paramC:Object={a:1,b:2};
        private var paramD:Boolean=false;
        public function OverLoadSample() {
            //分别给入不同类型的参数
            testOverLoad(paramA,"A");
            testOverLoad(paramB,"B");
            testOverLoad(paramC,"C");
            testOverLoad(paramD,"D");
            testOverLoad();
        }
        private function testOverLoad(...args) {
            switch (typeof(args[0])) {
                case "object" :
                    testFuncObj(args);
                    break;
                case "number" :
                    testFuncNum(args);
                    break;
                case "string" :
                    testFuncStr(args);
                    break;
                case "boolean" :
                    testFuncBool(args);
                    break;
                default :
                    testFuncDefault(args);
                    break;
            }

        }
        private function testFuncDefault(args):void {
            trace("this is a unknown type");
        }
        private function testFuncNum(args):void {
            trace("this is a number"+", param="+args[1]);
        }
        private function testFuncObj(args):void {
            trace("this is a object"+", param="+args[1]);
        }
        private function testFuncStr(args):void {
            trace("this is a string"+", param="+args[1]);
        }
        private function testFuncBool(args):void {
            trace("this is a boolean"+", param="+args[1]);
        }
    }
}
上例的输出结果为:
this is a number, param=A
this is a string, param=B
this is a object, param=C
this is a boolean, param=D
this is a unknown type
我这里利用第一个参数的不同类型来调用不同的方法,同时将整个args传入调用的方法来实现完整参数的传递.除开类型,还可以通过判断给定值,参数数量等不同的方法来实现重载.

沒有留言:

張貼留言