Flash AS3-内部名称空间修饰符

Flash AS3-内部名称空间修饰符,flash,actionscript-3,Flash,Actionscript 3,我正在一个图书馆工作,我希望把图书馆的内部内容向外界隐藏 我想我可以在我想隐藏类的地方使用“内部类” 然而,据我所知,在namespace test.NS1中声明类意味着它只能 在test.NS1中定义了访问类,没有其他定义 比如说, (两者都在同一个库中) test/test2无法看到彼此。 我是不是遗漏了什么?或者没有合适的方法隐藏我的内部类,但让它们在库中对话?名称空间“internal”限制对同一包中定义的类的访问。因此,类com.mycompany.app.Foo可以看到内部类com.

我正在一个图书馆工作,我希望把图书馆的内部内容向外界隐藏

我想我可以在我想隐藏类的地方使用“内部类”

然而,据我所知,在namespace test.NS1中声明类意味着它只能 在test.NS1中定义了访问类,没有其他定义

比如说,

(两者都在同一个库中)

test/test2无法看到彼此。 我是不是遗漏了什么?或者没有合适的方法隐藏我的内部类,但让它们在库中对话?

名称空间“internal”限制对同一包中定义的类的访问。因此,类
com.mycompany.app.Foo
可以看到内部类
com.mycompany.app.Bar
,但不能看到
com.mycompany.app.data.Baz

请参见

,以备将来参考

是的,您可以使用内部名称空间隐藏您的类! 您可以在每个子包中创建不同的名称空间,所有名称空间都指向相同的URI

例如:

com.mycompany.app 内部名称空间foo=“yourcompany.com/as3/namespaces/internal\u yourcompany”

com.mycompany.app.data 内部名称空间foo_data=“yourcompany.com/as3/namespaces/internal_yourcompany”

foo和foo_数据将是相同的命名空间,但位于不同的包中。 我找到了这个解释

对于属性的可见性,最重要的是uri。你可以定义两个 在两个不同的包中使用不同名称的命名空间。只要它们包含 相同的uri,它们将引用相同的属性


感谢您的响应,从本质上说,这意味着我不能在以逻辑方式构建包目录的同时从外部“隐藏我的类”?如果您希望它应用于子包,则不能使用“内部”命名空间。另一种方法是定义自己的自定义名称空间,并将其用于希望“隐藏”的类,类似于as3_内部名称空间。如果开发者真的愿意,他们仍然可以使用它,但是默认情况下它是不可见的。
/src/NS/test.as - internal class
/src/NS/test2/test2.as - internal class
namespace aNs = "myUri";
namespace bNs = "myUri";

class MyClass {
  aNs var foo: String;
}

var instance: MyClass = new MyClass();
instance.aNs::foo; // works as expected
instance.bNs::foo; // works too

var cNs: Namespace = new Namespace( "myUri" );
instance.cNs::foo; // works as well