flash - 命名空间错误 : "Top level of a class definition"?

标签 flash actionscript-3 namespaces encapsulation

我正在尝试封装一个包,以便在项目之外没有意义的类、属性和方法无法访问。但是,它们确实必须由项目中的其他类访问,因此 internal 是不够的 - parent.foo.AClass 的内部属性不能被访问parent.bar.AnotherClass。我的印象是命名空间可以解决这个问题,所以我尝试了这个:

//Class in top level package, where we make our namespaces
package parent {
    public namespace myproject;
    internal namespace myproject_internal;

    myproject class Top {
        //code
    }
}

//Some class not meant for use outside of the project
package parent.foo {
    use namespace myproject;
    use namespace myproject_internal;

    myproject_internal class AClass {
        //code
    }
}

//Some other class that can be accessed outside of the project,
//but is in a different subpackage
package parent.bar {
    use namespace myproject;
    use namespace myproject_internal;

    myproject class AnotherClass {
        //code
    }
}

但是,这会在类定义 (myproject class AnotherClass) 的 AnotherClass 中引发编译器错误:“用户定义的命名空间属性只能在顶部使用类定义的级别。”这意味着什么? namespace 是否意味着以其他方式使用?

最佳答案

错误被抛出,因为你试图将命名空间应用到你的整个类,但用户定义的命名空间仅限于与变量和函数一起使用(“类定义的顶级”意味着“元素 一个类")。如果你要说“但那是愚蠢的!”我只能同意你的看法——让类和接口(interface)也可以使用命名空间会更有意义。仍然:那些是规则。 :(

我还认为您的命名空间定义不正确。如果要为多个类使用命名空间,则应在单独的文件中声明它。像这样的东西:

package my_package {
    public namespace myproject;
}

/my_package/myproject.as

package my_package {
    internal namespace myproject_internal;
}

/my_package/myproject_internal.as 中。

请注意,在这种情况下,internal 指定命名空间本身 的可见性,而不是您使用它的函数和变量的可见性 - 这些将是可见的在自定义命名空间内(呃!)。如果您要使用 internal 命名空间,您的实现类必须驻留在同一个包中 - 否则将无法访问该命名空间。

参见 Grant Skinner's blog post有关命名空间的综合信息。

最后但同样重要的是,我强烈建议不要使用“parent”作为包名——除了它是一个非常模糊的名称外,当与显示对象一起使用时,这很容易导致命名冲突,其中 parent 指的是实际的父对象。

关于flash - 命名空间错误 : "Top level of a class definition"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9198006/

相关文章:

java - 上传图片缩略图到服务器,无需上传整张图片

regex - 在AS3,Regexp中使用变量

flash - 为什么 Flash ActionScript3 编译器会生成不必要的代码?

validation - 我应该如何验证和管理登录命名空间?

html - 如何让人们通过网络摄像头在网站上看到对方?

android - FREBitmapData 无法编辑

flash - 在页面离开时运行代码 [Actionscript]

actionscript-3 - ActionScript 3 : Bullet Ricocheting

c# - 类库命名空间层次结构不起作用

c++ - 定义命名空间作用域函数