Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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. |