Sistema de tipos (C++/CX)Type System (C++/CX)

Usando a arquitetura de Windows Runtime, você pode usar C++/CX, Visual Basic, Visual C# e JavaScript para escrever aplicativos e componentes que acessam diretamente a API do Windows e interoperam com outros aplicativos e componentes do Windows Runtime.By using the Windows Runtime architecture, you can use C++/CX, Visual Basic, Visual C# and JavaScript to write apps and components that directly access the Windows API and interoperate with other Windows Runtime apps and components. Plataforma Universal do Windows aplicativos que são escritos em C++ compile para código nativo que é executado diretamente na CPU.Universal Windows Platform apps that are written in C++ compile to native code that executes directly in the CPU. Plataforma Universal do Windows aplicativos escritos em C# ou Visual Basic Compilar para a MSIL (Microsoft Intermediate Language) e executá-los no Common Language Runtime (CLR).Universal Windows Platform apps that are written in C# or Visual Basic compile to Microsoft intermediate language (MSIL) and execute in the common language runtime (CLR). Plataforma Universal do Windows aplicativos que são gravados em JavaScript são executados em um ambiente de tempo de execução.Universal Windows Platform apps that are written in JavaScript execute in a run-time environment. Os componentes do sistema operacional Windows Runtime em si são escritos em C++ e são executados como código nativo.The Windows Runtime operating system components themselves are written in C++ and run as native code. Todos esses componentes e aplicativos de Plataforma Universal do Windows se comunicam diretamente por meio da ABI (interface binária de aplicativo Windows Runtime).All of these components and Universal Windows Platform apps communicate directly through the Windows Runtime application binary interface (ABI).

Para habilitar o suporte para o Windows Runtime em uma linguagem C++ moderna, a Microsoft criou o C++/CX.To enable support for the Windows Runtime in a modern C++ idiom, Microsoft created the C++/CX. O C++/CX fornece tipos base internos e implementações de tipos de Windows Runtime fundamentais que permitem que aplicativos e componentes do C++ se comuniquem pela ABI com aplicativos escritos em outras linguagens.C++/CX provides built-in base types and implementations of fundamental Windows Runtime types that enable C++ apps and components to communicate across the ABI with apps that are written in other languages. Você pode consumir qualquer tipo de Windows Runtime ou criar classes, structs, interfaces e outros tipos definidos pelo usuário que podem ser consumidos por outros aplicativos e componentes do Plataforma Universal do Windows.You can consume any Windows Runtime type, or create classes, structs, interfaces, and other user-defined types that can be consumed by other Universal Windows Platform apps and components. um aplicativo Plataforma Universal do Windows escrito em C++/CX também pode usar classes C++ regulares e estruturas, desde que elas não tenham acessibilidade pública.a Universal Windows Platform app that's written in C++/CX can also use regular C++ classes and structs as long as they don't have public accessibility.

Para uma discussão mais profunda da projeção de idioma C++/CX e como ela funciona sob as coberturas, veja estas postagens do blog:For an in-depth discussion of the C++/CX language projection and how it works under the covers, see these blog posts:

Arquivos de metadados do Windows (.winmd)Windows metadata (.winmd) files

Quando você compila um aplicativo de Plataforma Universal do Windows escrito em C++, o compilador gera o executável no código de máquina nativo e também gera um arquivo de metadados do Windows (. winmd) separado que contém descrições dos tipos de Windows Runtime públicos, que incluem classes, estruturas, enumerações, interfaces, interfaces com parâmetros e delegados.When you compile a Universal Windows Platform app that's written in C++, the compiler generates the executable in native machine code, and also generates a separate Windows metadata (.winmd) file that contains descriptions of the public Windows Runtime types, which include classes, structs, enumerations, interfaces, parameterized interfaces, and delegates. O formato de metadados lembra o formato usado nos assemblies do .NET Framework.The format of the metadata resembles the format that's used in .NET Framework assemblies. Em um componente do C++, o arquivo .winmd contém apenas metadados; o código executável reside em um arquivo separado.In a C++ component, the .winmd file contains only metadata; the executable code resides in a separate file. Esse é o caso para os componentes de Windows Runtime incluídos no Windows.This is the case for the Windows Runtime components that are included with Windows. O nome do arquivo WinMD deve coincidir ou ser um prefixo do namespace raiz no código-fonte.The WinMD file name must match or be a prefix of the root namespace in the source code. (Para as linguagens .NET Framework, o arquivo .winmd contém o código e os metadados, assim como um assembly do .NET Framework.)(For .NET Framework languages, the .winmd file contains both the code and the metadata, just like a .NET Framework assembly.)

Os metadados no arquivo .winmd representam a superfície publicada do seu código.The metadata in the .winmd file represents the published surface of your code. Os tipos publicados são visíveis para outras plataformas universais do Windows, independentemente da linguagem na qual os outros aplicativos estão escritos.Published types are visible to other Universal Windows Platforms no matter what language those other apps are written in. Portanto, os metadados ou o código publicado só podem conter tipos especificados pelo sistema de tipos de Windows Runtime.Therefore, the metadata, or your published code, can only contain types specified by the Windows Runtime type system. As construções de linguagem específicas ao C++, como classes, matrizes, modelos ou contêineres STL regulares não podem ser publicadas nos metadados porque um aplicativo cliente Javascript ou C# não saberia o que fazer com elas.Language constructs that are specific to C++, such as regular classes, arrays, templates or STL containers, cannot be published in metadata because a Javascript or C# client app would not know what to do with them.

Se um tipo ou um método estará visível nos metadados dependerá de quais modificadores de acessibilidade foram aplicados a ele.Whether a type or method is visible in metadata depends on what accessibility modifiers are applied to it. Para ser visível, um tipo deve ser declarado em um namespace e deve ser declarado como público.To be visible, a type must be declared in a namespace and must be declared as public. Uma classe ref não pública é permitida como um tipo auxiliar interno no seu código; ela não está visível nos metadados.A non-public ref class is permitted as an internal helper type in your code; it just isn't visible in the metadata. Até mesmo em uma classe ref pública, nem todos os membros estão necessariamente visíveis.Even in a public ref class, not all members are necessarily visible. A tabela a seguir lista a relação entre os especificadores de acesso C++ em uma classe ref pública e Windows Runtime visibilidade de metadados:The following table lists the relationship between C++ access specifiers in a public ref class, and Windows Runtime metadata visibility:

{1>Publicado nos metadados<1}Published in metadata Não publicado nos metadadosNot published in metadata
públicopublic particularesprivate
protegidosprotected internointernal
público protegidopublic protected privado protegidoprivate protected

Use o Pesquisador de objetos para exibir o conteúdo de arquivos .winmd.You can use the Object Browser to view the contents of .winmd files. Os componentes Windows Runtime incluídos com o Windows estão no arquivo Windows. winmd.The Windows Runtime components that are included with Windows are in the Windows.winmd file. O arquivo default. winmd contém os tipos fundamentais que são usados no C++/CX, e o Platform. winmd contém tipos adicionais do namespace da plataforma.The default.winmd file contains the fundamental types that are used in C++/CX, and platform.winmd contains additional types from the Platform namespace. Por padrão, esses três arquivos. winmd são incluídos em cada projeto C++ para aplicativos Plataforma Universal do Windows.By default, these three .winmd files are included in every C++ project for Universal Windows Platform apps.

Dica

Os tipos no Platform::Collections Namespace não aparecem no arquivo .winmd porque não são públicos.The types in the Platform::Collections Namespace don't appear in the .winmd file because they are not public. Eles são implementações particulares específicas do C++ das interfaces definidas em Windows::Foundation::Collections.They are private C++-specific implementations of the interfaces that are defined in Windows::Foundation::Collections. Um aplicativo Windows Runtime escrito em JavaScript ou C# não sabe o que é uma classe Platform:: Collections:: vector , mas pode consumir um Windows::Foundation::Collections::IVector .A Windows Runtime app that's written in JavaScript or C# doesn't know what a Platform::Collections::Vector Class is, but it can consume a Windows::Foundation::Collections::IVector. Os tipos Platform::Collections são definidos em collection.h.The Platform::Collections types are defined in collection.h.

Sistema de tipos de Windows Runtime em C++/CXWindows Runtime type system in C++/CX

As seções a seguir descrevem os principais recursos do sistema de tipos de Windows Runtime e como eles têm suporte no C++/CX.The following sections describe the major features of the Windows Runtime type system and how they are supported in C++/CX.

NamespacesNamespaces

Todos os tipos de Windows Runtime devem ser declarados dentro de um namespace; a própria API do Windows é organizada por namespaces.All Windows Runtime types must be declared within a namespace; the Windows API itself is organized by namespaces. Um arquivo .winmd deve ter o mesmo nome do namespace raiz.A .winmd file must have the same name that the root namespace has. Por exemplo, uma classe denominada A.B.C.MyClass poderá ser instanciada somente se for definida em um arquivo de metadados denominado A.winmd ou A.B.winmd ou A.B.C.winmd.For example, a class that's named A.B.C.MyClass can be instantiated only if it's defined in a metadata file that's named A.winmd or A.B.winmd or A.B.C.winmd. O nome da DLL não precisa coincidir com o nome do arquivo .winmd.The name of the DLL is not required to match the .winmd file name.

A própria API do Windows foi reinventada como uma biblioteca de classes bem fatorada organizada por namespaces.The Windows API itself has been reinvented as a well-factored class library that's organized by namespaces. Todos os componentes de Windows Runtime são declarados nos namespaces Windows. *.All Windows Runtime components are declared in the Windows.* namespaces.

Para obter mais informações, consulte namespaces e visibilidade de tipo.For more information, see Namespaces and Type Visibility.

Tipos fundamentaisFundamental types

O Windows Runtime define os seguintes tipos fundamentais: UInt8, Int16, UInt16, Int32, UInt32, Int64, UInt64, Single, Double, Char16, Boolean e String.The Windows Runtime defines the following fundamental types, UInt8, Int16, UInt16, Int32, UInt32, Int64, UInt64, Single, Double, Char16, Boolean, and String. O C++/CX dá suporte aos tipos numéricos fundamentais em seu namespace padrão como UInt16, UInt32, UInt64, Int16, Int32, Int64, float32, float64 e char16.C++/CX supports the fundamental numeric types in its default namespace as uint16, uint32, uint64, int16, int32, int64, float32, float64, and char16. Boolean e String também são definidos no namespace Platform.Boolean and String are also defined in the Platform namespace.

O C++/CX também define uint8, equivalente a unsigned char , que não tem suporte no Windows Runtime e não pode ser usado em APIs públicas.C++/CX also defines uint8, equivalent to unsigned char, which is not supported in the Windows Runtime and cannot be used in public APIs.

Um tipo fundamental pode ser transformado em anulável convertendo-o em uma interface Platform::IBox Interface .A fundamental type may be made nullable by wrapping it in a Platform::IBox Interface interface. Para obter mais informações, consulte Classes e estruturas de valor.For more information, see Value classes and structs.

Para obter mais informações sobre tipos fundamentais, consulte Tipos fundamentaisFor more information about fundamental types, see Fundamental types

Cadeias de caracteresStrings

Uma cadeia de caracteres Windows Runtime é uma sequência imutável de caracteres UNICODE de 16 bits.A Windows Runtime string is an immutable sequence of 16-bit UNICODE characters. Uma cadeia de caracteres Windows Runtime é projetada como Platform::String^ .A Windows Runtime string is projected as Platform::String^. Essa classe fornece métodos para construção, manipulação e conversão de cadeia de caracteres de e para wchar_t .This class provides methods for string construction, manipulation, and conversion to and from wchar_t.

Para obter mais informações, consulte Cadeias de caracteres.For more information, see Strings.

MatrizesArrays

O Windows Runtime dá suporte a matrizes unidimensionais de qualquer tipo.The Windows Runtime supports 1-dimensional arrays of any type. Não há suporte para matrizes de matrizes.Arrays of arrays are not supported. No C++/CX, Windows Runtime matrizes são projetadas como a classe Platform:: array.In C++/CX, Windows Runtime arrays are projected as the Platform::Array Class.

Para obter mais informações, consulte array e WriteOnlyArrayFor more information, see Array and WriteOnlyArray

Classes e estruturas refRef classes and structs

Uma classe de Windows Runtime é projetada em C++/CX como uma ref class ou ref struct, pois elas são copiadas por referência.A Windows Runtime class is projected in C++/CX as a ref class or ref struct, because they are copied by reference. O gerenciamento de memória para classes e estruturas ref é manipulado de forma transparente por meio da contagem de referência.Memory management for ref classes and ref structs is handled transparently by means of reference counting. Quando a última referência a um objeto fica fora do escopo, o objeto é destruído.When the last reference to an object goes out of scope, the object is destroyed. Uma classe ou estrutura ref pode:A ref class or ref struct can:

  • Conter como membros construtores, métodos, propriedades e eventos.Contain as members constructors, methods, properties, and events. Esses membros podem ter acessibilidade pública, privada, protegida ou interna.These members can have public, private, protected, or internal accessibility.

  • Pode conter definições aninhadas privadas de enum, estrutura ou classe.Can contain private nested enum, struct, or class definitions.

  • Pode herdar diretamente de uma classe base e pode implementar qualquer número de interfaces.Can directly inherit from one base class and can implement any number of interfaces. Todas as classes ref podem ser convertidas implicitamente na Platform::Object Class e podem substituir seus métodos virtuais, por exemplo, Object::ToString.All ref classes are implicitly convertible to the Platform::Object Class and can override its virtual methods—for example, Object::ToString.

Uma classe ref que tem um construtor público também precisa ser declarada como fechada para evitar mais derivação.A ref class that has a public constructor must be declared as sealed, to prevent further derivation.

Para obter mais informações, consulte ref classes e structsFor more information, see Ref classes and structs

Classes e estruturas de valorValue classes and structs

Uma classe ou estrutura de valor representa uma estrutura de dados básica e contém apenas campos, que podem ser classes de valor, estruturas de valor ou o tipo Platform::String^.A value class or value struct represents a basic data structure and contains only fields, which may be value classes, value structs, or type Platform::String^. As estruturas e classes de valor são copiadas por valor.Value structs and value classes are copied by value.

Um estrutura de valor pode ser transformada em anulável convertendo em uma interface IBox.A value struct can be made nullable by wrapping in an IBox interface.

Para obter mais informações, consulte Classes e estruturas de valor.For more information, see Value classes and structs.

Classes parciaisPartial classes

O recurso de classe parcial permite que uma classe seja definida em vários arquivos.The partial class feature enables one class to be defined over multiple files. Ele é usado principalmente para habilitar a geração de ferramentas, como o editor XAML, para modificar um arquivo sem tocar no arquivo que você edita.It's used primarily to enable code-generation tools such as the XAML editor to modify one file without touching the file that you edit.

Para obter mais informações, consulte Classes parciaisFor more information, see Partial classes

PropriedadesProperties

Uma propriedade é um membro de dados públicos de qualquer tipo de Windows Runtime e é implementada como um par de métodos get/set.A property is a public data member of any Windows Runtime type and is implemented as a get/set method pair. O código de cliente acessa uma propriedade como se fosse um campo público.Client code accesses a property as if it were a public field. Uma propriedade que não requer código get ou set personalizado é conhecida como uma propriedade trivial e pode ser declarada sem métodos get ou set explícitos.A property that requires no custom get or set code is known as a trivial property and can be declared without explicit get or set methods.

Para obter mais informações, consulte Propriedades.For more information, see Properties.

Coleções de Windows Runtime em C++/CXWindows Runtime collections in C++/CX

O Windows Runtime define um conjunto de interfaces para tipos de coleção que cada linguagem implementa de sua própria maneira.The Windows Runtime defines a set of interfaces for collection types that each language implements in its own way. O C++/CX fornece implementações na classe Platform:: coleções:: vector, plataforma:: Collections:: mape outros tipos de coleção concreto relacionados, que são compatíveis com suas contrapartes da STL (biblioteca de modelos padrão).C++/CX provides implementations in the Platform::Collections::Vector Class, Platform::Collections::Map Class, and other related concrete collection types, which are compatible with their Standard Template Library (STL) counterparts.

Para obter mais informações, consulte coleções.For more information, see Collections.

Classes de referência de modeloTemplate ref classes

As classes ref particulares e internas podem ser modeladas e especializadas.Private and internal ref classes can be templated and specialized.

Para obter mais informações, consulte Classes de referência de modelo.For more information, see Template ref classes.

InterfacesInterfaces

Uma interface Windows Runtime define um conjunto de propriedades públicas, métodos e eventos que uma ref class ou ref struct deve implementar se for herdada da interface.A Windows Runtime interface defines a set of public properties, methods, and events that a ref class or ref struct must implement if it inherits from the interface.

Para obter mais informações, consulte interfaces.For more information, see Interfaces.

EnumeraçõesEnums

Uma classe enum no Windows Runtime assemelha-se a uma enumeração com escopo em C++.An enum class in Windows Runtime resembles a scoped enum in C++. O tipo subjacente é int32, a menos que o atributo [Flags] seja aplicado; nesse caso, o tipo subjacente será uint32.The underlying type is int32, unless the [Flags] attribute is applied—in that case, the underlying type is uint32.

Para obter mais informações, consulte Enums.For more information, see Enums.

DelegadosDelegates

Um delegado no Windows Runtime é análogo a um objeto std:: function em C++.A delegate in the Windows Runtime is analogous to a std::function object in C++. É um tipo especial de classe ref usado para invocar funções fornecidas pelo cliente que têm assinaturas compatíveis.It's a special kind of ref class that's used to invoke client-provided functions that have compatible signatures. Delegados são usados com mais frequência no Windows Runtime como o tipo de um evento.Delegates are most commonly used in the Windows Runtime as the type of an event.

Para obter mais informações, consulte Delegados.For more information, see Delegates.

ExceçõesExceptions

Em C++/CX, você pode capturar tipos de exceção personalizados, tipos std::exception e tipos Platform::Exception .In C++/CX, you can catch custom exception types, std::exception types, and Platform::Exception types.

Para obter mais informações, consulte Exceções.For more information, see Exceptions.

EventosEvents

Um evento é um membro público em uma classe ou estrutura ref cujo tipo é delegado.An event is a public member in a ref class or ref struct whose type is a delegate type. Um evento somente pode ser invocado, ou seja, disparado, pela classe que o possui.An event can only be invoked—that is, fired—by the owning class. No entanto, o código de cliente pode fornecer suas próprias funções, que são conhecidas como manipuladores de eventos e são invocadas quando a classe possuidora dispara o evento.However, client code can provide its own functions, which are known as event handlers and are invoked when the owning class fires the event.

Para obter mais informações, consulte Eventos.For more information, see Events.

TransmissãoCasting

O C++/CX oferece suporte aos operadores cast C++ padrão static_cast, dynamic_caste reinterpret_cast, além do operador safe_cast que é específico ao C++/CX.C++/CX supports the standard C++ cast operators static_cast, dynamic_cast, and reinterpret_cast, and also the safe_cast operator that's specific to C++/CX.

Para obter mais informações, consulte Conversão.For more information, see Casting.

Conversão boxingBoxing

Uma variável demarcada é um tipo de valor que é encapsulado em um tipo de referência em situações nas quais a semântica de referência é necessária.A boxed variable is a value type that's wrapped in a reference type in situations where reference semantics are required.

Para obter mais informações, consulte Boxing.For more information, see Boxing.

AtributosAttributes

Um atributo é um valor de metadados que pode ser aplicado a qualquer tipo de Windows Runtime ou membro de tipo e pode ser inspecionado em tempo de execução.An attribute is a metadata value that can be applied to any Windows Runtime type or type member and can be inspected at run time. O Windows Runtime define um conjunto de atributos comuns no Windows::Foundation::Metadata namespace.The Windows Runtime defines a set of common attributes in the Windows::Foundation::Metadata namespace. Os atributos definidos pelo usuário em interfaces públicas não são suportados pelo Windows Runtime nesta versão.User-defined attributes on public interfaces are not supported by Windows Runtime in this release.

Substituição de APIAPI Deprecation

Descreve como marcar APIs públicas como preteridas usando o mesmo atributo usado pelos tipos de sistema Windows Runtime.Describes how to mark public APIs as deprecated by using the same attribute that's used by the Windows Runtime system types.

Para obter mais informações, consulte preterindo tipos e membros.For more information, see Deprecating types and members.

Confira tambémSee also

Referência de linguagem do C++/CXC++/CX Language Reference