`

[转]AS3笔记(10),namespace之二(访问控制)

 
阅读更多
本文为frank的学习笔记,转载请注明原文链接
更多笔记请参看:http://www.2solo.cn/log/article.asp?id=87

在As3中,Namespace (命名空间)类包含用于定义和使用命名空间的方法和属性.其中使用方案有以下三 中:

XML 对象的命名空间
用于区分方法的命名空间
用于访问控制的命名空间
XML 对象的命名空间方法已经在前一篇笔记中做了小结,这篇blog我准备小结一下后两者,我综合在一 起,称为"Namespace控制方法和属性的访问".

通过帮助里的文档,我们可以发现,namespace其实类似public,private,,internal,protected,可以用 于自定义函数和属性的作用域.

以下为namespace的基本用法,摘自帮助:
使用命名空间时,应遵循以下三个基本步骤。第一,必须使用 namespace 关键字来定义命名空间。例如,下面的代码定义 version1 命名空间:

namespace version1;
           
第二,在属性或方法声明中,使用命名空间(而非访问控制说明符)来应用命名空间。 下面的示例将一个名为 myFunction() 的函数放在 version1 命名空间中:

version1 function myFunction() {}
           
第三,在应用了该命名空间后,可以使用 use 指令引用它,也可以使用 该命名空间来限定标识符的名称。下面的示例通过 use 指令来引用 myFunction() 函数:

use namespace version1;
            myFunction();
           
您还可以使用限定名称来引用 myFunction() 函数,如下面的示例所示:

version1::myFunction();
下例通过定义和引用自定义的namespace实现了同名方法的分类访问.

/*@
Author:frank
Site:www.2solo.cn
Date:2008.02.08
Info:Namespace 函数控制测试
*/
package {
    import flash.display.Sprite;

    public class nsFunctionSample extends Sprite {
        public function nsFunctionSample() {
            var vocab:sayHello = new sayHello();
            trace(vocab.hello());
            trace(vocab.FR::hello());
            trace(vocab.EN::hello());
        }
    }
}
namespace FR
namespace EN
class sayHello {
    public function sayHello() {
        trace(FR.uri);
    }
    public function hello():String {
        return "你好";
    }
    EN function hello():String {
        return "hello";
    }
    FR function hello():String {
        return "bon jour";
    }
    public function getNS() {
        return FR;
    }
}
上例的输出结果为:
nsFunctionSample.as$0:FR
你好
bon jour
hello
再见下例:
/*@
Author:frank
Site:www.2solo.cn
Date:2008.02.08
Info:Namespace 函数控制测试
*/
package {
    import flash.display.Sprite;

    public class nsFunctionSample extends Sprite {
        public function nsFunctionSample() {
            var vocab:sayHello = new sayHello();
            var ns=vocab.getNS();
            trace(vocab.hello());
            trace(vocab.ns::hello());
            //trace(vocab.EN::hello());
        }
    }
}
//namespace FR
//namespace EN
class sayHello {
    public namespace FR
    public namespace EN
    public function sayHello() {
        trace(FR.uri);
    }
    public function hello():String {
        return "你好";
    }
    EN function hello():String {
        return "hello";
    }
    FR function hello():String {
        return "bon jour";
    }
    public function getNS() {
        return FR;
    }
}
输出结果为:
nsFunctionSample.as$0:sayHello/FR
你好
bon jour

两个方法的区别在于FR和EN两个命名空间的定义域不同,从trace(FR.uri);可以看出,第一种方法定义的FR作用域为包内,而第二中方法定 义的作用域为类内部.从vocab.ns::hello()这句话可见,在第二中方法里,是先对FR命名空间做了引用才可 以访问到.而如果直接trace(vocab.EN::hello());则会报错.相比两种方法,第一种方法的使用比较方便. 可以通过use namespace来更方便的控制函数的访问.而第二种方法则对定义的控制更严谨.
下例子 为一个命名空间属性控制的实例,通过该实例可以延伸出程序版本控制的方法:
/*@
Author:frank
Site:www.2solo.cn
Date:2008.02.08
Info:Namespace 属性控制测试
*/
package {
    import flash.display.Sprite;

    public class nsPropertySample extends Sprite {
        public function nsPropertySample() {

            var vocab:sayHello = new sayHello("EN");
            trace(vocab.hello());
        }
    }
}
class sayHello {
    private namespace CN
    private namespace FR
    private namespace EN
    CN var word="你好";
    FR var word="bon jour";
    EN var word="hello";
    private var ns:Namespace;
    public function sayHello(str) {
        switch (str) {
            case "CN" :
                 ns=CN;
                 break;
            case "FR" :
                 ns=FR;
                 break;
            case "EN" :
                 ns=EN;
                 break;
        }

    }
    public function hello():String {
        return ns::word;
    }
}
两个范例的源文件:http://www.2solo.cn/upload/ns2_2soloDOTcn.zip.供参考.
分享到:
评论

相关推荐

    thinkphp5 详细笔记

    #### 二、命名空间 **1. 命名空间的作用:** - **避免命名冲突:** 命名空间可以避免类名或函数名的冲突,使得代码更加健壮。 - **组织代码:** 命名空间可以帮助开发者更好地组织代码,提高代码的可读性和可维护...

    《C++编程思想》阅读笔记

    - **默认访问控制**:在C++中,`struct` 和 `class` 的唯一区别在于默认的访问级别不同。`struct` 默认成员是公有的(`public`),而 `class` 默认成员是私有的(`private`)。 #### 十二、默认参数 - **规则**:在...

    net学习笔记及其他代码应用

    解2: select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A) 34.面向对象的语言具有________性、_________性、________性 答:封装、继承、多态。 35.能用foreach遍历访问的...

    webservice学习笔记

    ### WebService 学习笔记详解 #### 一、实验环境搭建与配置 在开始Web Service的学习之前,首先需要搭建一个适合开发的环境。本实验基于以下配置: - 操作系统:Windows 2000 (Win2k) - JDK版本:1.6 - Java EE...

    JavaScript学习笔记

    1. 控制流关键字:`as`, `else`, `switch`, `break`, `export`, `item`, `this`, `case`, `extends`, `namespace`, `throw` 2. 声明关键字:`catch`, `false`, `new`, `true`, `class`, `finally`, `null`, `try`, `...

    Flex新手教程_入门级学习笔记

    ### Flex新手教程_入门级学习笔记 #### ActionScript核心概念 **ActionScript(简称AS)** 是一种面向对象的编程语言,主要用于开发Flex应用程序。掌握AS的基础知识对于学习Flex至关重要。 ##### 类和对象 (Class...

    Struts2使用笔记

    - **Commons-logging**:ASF的日志包,允许Struts2灵活地支持各种日志框架,如Log4j。 2. **Struts2的部署与配置**: - **创建WEB项目**:首先需要创建一个标准的Java Web项目。 - **导入jar包**:将上述依赖的...

    【C#-VS-IL】 c#笔记.docx

    此外,还有一些**转义字符**,用于表示特殊的控制字符,例如`\n`(换行)、`\t`(制表符)等。 #### 实数型 C# 支持两种浮点类型:`float` 和 `double`。这两种类型的主要区别在于精度和存储空间的大小。`float` ...

    遍历outlook,分许内容

    它不仅提供邮件管理功能,还支持日程安排、任务管理、联系人管理和笔记等。"遍历Outlook, 分析内容"这个主题涉及到如何通过编程方式访问并处理Outlook中的数据,这通常涉及到自动化脚本或应用的开发。在本文中,我们...

    libusb-1.0.9

    首先声明,这是看到国外论坛上的学习文章后,独立翻译过来作为笔记用,加入部分自我理解,并且全部原创。 介绍: libusb是一个开源库,可以帮助开发者在用户空间的层面上与UBS设备进行通讯。如果想了解更多,可以...

Global site tag (gtag.js) - Google Analytics