Поделиться через


Пространства имен и видимость типов (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>, StringGuidи Boolean. Также включает специальные вспомогательные типы, такие как Platform::Agile<T> и Platform::Box<T>.
Platform::Collections Содержит конкретные классы коллекции, реализующие интерфейсы IVectorIMapколлекции среда выполнения Windows и т. д. Эти типы определены в файле заголовка collection.h, а не в файле platform.winmd.
Platform::Details Содержит типы, используемые компилятором; они не предназначены для общедоступного потребления.

См. также

Система типов (C++/CX)