Partilhar via


Namespaces e visibilidade de tipo (C++/CX )

Um namespace é uma construção C++ padrão para agrupar tipos que têm funcionalidade relacionada e para evitar colisões de nomes em bibliotecas. O sistema de tipo do Tempo de Execução do Windows requer que todos os tipos públicos do Tempo de Execução do Windows, incluindo aqueles em seu próprio código, sejam declarados em um namespace no escopo do namespace. Os tipos públicos declarados no escopo global ou aninhados dentro de outra classe causarão um erro em tempo de compilação.

Um arquivo .winmd deve ter o mesmo nome que o namespace raiz. Por exemplo, uma classe chamada A.B.C.MyClass pode ser instanciada somente se for definida em um arquivo de metadados chamado A.winmd ou A.B.winmd ou A.B.C.winmd. O nome do executável não é necessário para corresponder ao nome do arquivo .winmd.

Visibilidade do tipo

Em um namespace, os tipos do Tempo de Execução do Windows — ao contrário dos tipos C++ padrão — têm acessibilidade pública ou privada. Por padrão, a acessibilidade é privada. Apenas um tipo público é visível para metadados e, portanto, é consumível de aplicativos e componentes que podem ser escritos em idiomas diferentes de C++. Em geral, as regras para tipos visíveis são mais restritivas do que as regras para tipos não visíveis porque os tipos visíveis não podem expor conceitos específicos do C++ que não são suportados em linguagens .NET ou JavaScript.

Observação

Os metadados só são consumidos em tempo de execução pelas linguagens .NET e JavaScript. Quando um aplicativo ou componente C++ está conversando com outro aplicativo ou componente C++ — isso inclui componentes do Windows, que são todos escritos em C++ — então nenhum consumo de metadados em tempo de execução é necessário.

Acessibilidade e visibilidade dos membros

Em uma classe, interface ou delegado ref privado, nenhum membro é emitido para metadados, mesmo que eles tenham acessibilidade pública. Nas classes ref públicas, você pode controlar a visibilidade dos membros nos metadados independentemente de sua acessibilidade no código-fonte. Como no C++ padrão, aplique o princípio do menor privilégio; Não torne seus membros visíveis em metadados, a menos que eles absolutamente devam ser.

Use os modificadores de acesso a seguir para controlar a visibilidade dos metadados e a acessibilidade do código-fonte.

Modificador Significado Emitido para metadados?
private A acessibilidade padrão. O mesmo significado que no C++ padrão. Não
protected O mesmo significado que no C++ padrão, tanto no aplicativo ou componente quanto nos metadados. Yes
public O mesmo significado que no C++ padrão. Yes
public protected -ou- protected public Acessibilidade protegida em metadados, pública dentro do aplicativo ou componente. Yes
protected private ou private protected Não visível nos metadados; Acessibilidade protegida dentro do aplicativo ou componente.
internal ou private public O membro é público dentro do aplicativo ou componente, mas não é visível nos metadados. Não

Namespaces do Tempo de Execução do Windows

A API do Windows consiste em tipos declarados nos namespaces Windows::*. Esses namespaces são reservados para Windows e os tipos não podem ser adicionados a eles. No Pesquisador de Objetos, você pode exibir esses namespaces no arquivo windows.winmd. Para obter documentação sobre esses namespaces, consulte API do Windows.

Namespaces C++/CX

O C++/CX define certos tipos nesses namespaces como parte da projeção do sistema de tipos do Tempo de Execução do Windows.

Namespace Descrição
predefinição Contém os tipos numéricos e char16 internos. Esses tipos estão no escopo em cada namespace e uma using instrução nunca é necessária.
Platform Contém principalmente tipos públicos que correspondem aos tipos do Tempo de Execução do Windows, como Array<T>, String, Guide Boolean. Também inclui tipos auxiliares especializados, como Platform::Agile<T> e Platform::Box<T>.
Platform::Collections Contém as classes de coleção concretas que implementam as interfaces IVectorde coleção do Tempo de Execução do Windows, IMape assim por diante. Esses tipos são definidos em um arquivo de cabeçalho, collection.h, não em platform.winmd.
Platform::Details Contém tipos que são usados pelo compilador e não se destinam ao consumo público.

Ver também

Tipo de Sistema (C++/CX)