Пространства имен и видимость типов (C++/CX)
Пространство имен — стандартная конструкция C++, которая предназначена для группирования типов, имеющих связанную функциональность, и для предотвращения конфликтов имен в библиотеках. Система типов среда выполнения Windows требует, чтобы все общедоступные среда выполнения Windows типы, включая типы в собственном коде, должны быть объявлены в пространстве имен в области пространства имен. Объявление открытых типов в глобальной области видимости или вложенными в другой класс приведет к ошибке времени компиляции.
WINMD-файл должен иметь одно имя с корневым пространством имен. Например, экземпляр класса с именем A.B.C.MyClass может быть создан, только если он определен в файле метаданных с именем A.winmd, A.B.winmd или A.B.C.winmd. Имя исполняемого файла не обязательно должно соответствовать имени WINMD-файла.
Видимость типов
В пространстве имен среда выполнения Windows типы , в отличие от стандартных типов C++, имеют частные или общедоступные специальные возможности. По умолчанию типы являются закрытыми. Только открытые типы являются видимыми для метаданных и поэтому могут использоваться из приложений и компонентов, которые написаны на языках, отличных от C++. В общем случае правила для видимых типов являются более жесткими, чем правила для невидимых типов, поскольку видимые типы не могут предоставлять доступ к характерным для C++ возможностям, не поддерживаемым в языках .NET или JavaScript.
Примечание.
Метаданные используются языками .NET и JavaScript только во время выполнения. Когда приложение или компонент C++ взаимодействуют с другим приложением или компонентом C++ (включая компоненты Windows, написанные на C++), во время выполнения метаданные не требуются.
Режим доступа и видимость членов
В закрытых ссылочных классах, интерфейсах или делегатах никакие члены не передаются в метаданные, даже если эти члены являются открытыми. В открытых ссылочных классах можно управлять видимостью членов в метаданных независимо от доступности этих членов в исходном коде. Как и в стандартном C++, здесь действует принцип минимальных полномочий; члены не следует делать видимыми в метаданных, если нет явной потребности в этом.
Используйте следующие модификаторы доступа для управления видимостью в метаданных и доступностью в исходном коде.
Модификатор | Значение | Передается в метаданные? |
---|---|---|
private |
Режим доступа по умолчанию. То же значение, что и в стандартном C++. | No |
protected |
То же значение, что и в стандартном C++, как в приложении или компоненте, так и в метаданных. | Да |
public |
То же значение, что и в стандартном C++. | Да |
public protected -или- protected public |
Защищенный доступ в метаданных, открытый в приложении или компоненте. | Да |
protected private или private protected |
Невидим в метаданных; защищенный доступ в приложении или компоненте. | |
internal или private public |
Член открыт в приложении или компоненте, но невидим в метаданных. | No |
пространства имен среда выполнения Windows
API Windows состоит из типов, объявленных в пространствах имен Windows::*. Эти пространства имен зарезервированы для Windows, и в них нельзя добавлять типы. В Обозреватель объектовможно просмотреть эти пространства имен в файле windows.winmd. Документацию по этим пространствам имен см. в разделе API Windows.
пространства имен C++/CX
C++/CX определяет определенные типы в этих пространствах имен в рамках проекции системы типов среда выполнения Windows.
Пространство имен | Description |
---|---|
default | Содержит встроенные числовые типы и типы char16. Эти типы находятся в области видимости каждого пространства имен, и для них не требуется оператор using . |
Platform |
Содержит в основном общедоступные типы, соответствующие таким типам среда выполнения Windows, как Array<T> , String Guid и Boolean . Также включает специальные вспомогательные типы, такие как Platform::Agile<T> и Platform::Box<T> . |
Platform::Collections |
Содержит конкретные классы коллекции, реализующие интерфейсы IVector IMap коллекции среда выполнения Windows и т. д. Эти типы определены в файле заголовка collection.h, а не в файле platform.winmd. |
Platform::Details |
Содержит типы, используемые компилятором; они не предназначены для общедоступного потребления. |