Flash AS3 - Модификатор внутреннего пространства имен - PullRequest
2 голосов
/ 27 сентября 2010

Я работаю над библиотекой, в которой я хочу скрыть внутренности от внешнего мира.

Я подумал, что могу использовать «внутренний класс» везде, где я хотел скрыть класс,

Как я понимаю, объявление класса в пространстве имен test.NS1 означает, что он может получать доступ только к определениям классов в test.NS1 и ничего больше.

Например,

(оба вта же библиотека)

/src/NS/test.as - internal class
/src/NS/test2/test2.as - internal class

test / test2 не могут видеть друг друга.Я что-то здесь упускаю?или нет правильного способа скрыть мои внутренние классы, пока они не разговаривают в библиотеке?

Ответы [ 2 ]

4 голосов
/ 27 сентября 2010

Пространство имен «internal» ограничивает доступ к классам, определенным в том же пакете .Следовательно, класс com.mycompany.app.Foo может видеть внутренний класс com.mycompany.app.Bar, но не com.mycompany.app.data.Baz.

См. http://www.adobe.com/livedocs/flex/201/langref/statements.html#internal

3 голосов
/ 10 декабря 2014

Для дальнейшего использования.

Да, вы можете скрыть свои классы с помощью внутренних пространств имен!Вы можете создать разные пространства имен в каждом подпакете, все они указывают на один и тот же URI.

, например:

com.mycompany.app внутреннее пространство имен foo = "yourcompany.com/as3/namespaces/ internal_yourcompany "

com.mycompany.app.data внутреннее пространство имен foo_data =" yourcompany.com/as3/namespaces/internal_yourcompany"

foo и foo_data будут одним и тем же пространством имен, но в другомпакет.Я нашел это объяснение здесь

Для наглядности свойств все, что имеет значение, это URI.Вы можете определить два пространства имен с разными именами в двух разных пакетах.Пока они содержат одинаковые URI, они будут ссылаться на одно и то же свойство.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...