Partilhar via


typeid (C++/CLI e C++/CX)

Obtém um valor que indica o tipo de um objeto.

Observação

Este tópico refere-se à versão C++ Component Extensions do typeid. Para a versão ISO C++ desta palavra-chave, consulte typeid Operator.

Todos os tempos de execução

Sintaxe

T::typeid

Parâmetros

T
Um nome de tipo.

Tempo de Execução do Windows

Sintaxe

Platform::Type^ type = T::typeid;

Parâmetros

T
Um nome de tipo.

Observações

Em C++/CX, typeid retorna um Platform::Type que é construído a partir de informações de tipo de tempo de execução.

Requerimentos

Opção do compilador: /ZW

Ambiente de Execução de Linguagem Comum

Sintaxe

System::Type^ type = T::typeid;

Parâmetros

tipo
O nome de um tipo (declarador abstrato) para o qual você deseja o System::Type objeto.

Observações

typeid é usado para obter o Type para um tipo em tempo de compilação.

typeid é semelhante a obter o System::Type para um tipo em tempo de execução usando GetType ou GetType. No entanto, typeid só aceita um nome de tipo como parâmetro. Se você quiser usar uma instância de um tipo para obter seu System::Type nome, use GetType.

typeid deve ser capaz de avaliar um nome de tipo (type) em tempo de compilação, enquanto GetType avalia o tipo a ser retornado em tempo de execução.

typeid pode usar um nome de tipo nativo ou um alias de Common Language Runtime para o nome do tipo nativo; consulte .NET Framework Equivalentes a tipos nativos de C++ (C++/CLI) para obter mais informações.

typeid também funciona com tipos nativos, embora ainda retorne um System::Typearquivo . Para obter uma estrutura type_info, use typeid Operador.

Requerimentos

Opção do compilador: /clr

Exemplos

O exemplo a seguir compara a palavra-chave typeid com o GetType() membro.

// keyword__typeid.cpp
// compile with: /clr
using namespace System;

ref struct G {
   int i;
};

int main() {
   G ^ pG = gcnew G;
   Type ^ pType = pG->GetType();
   Type ^ pType2 = G::typeid;

   if (pType == pType2)
      Console::WriteLine("typeid and GetType returned the same System::Type");
   Console::WriteLine(G::typeid);

   typedef float* FloatPtr;
   Console::WriteLine(FloatPtr::typeid);
}
typeid and GetType returned the same System::Type
G

System.Single*

O exemplo a seguir mostra que uma variável do tipo System::Type pode ser usada para obter os atributos em um tipo. Ele também mostra que, para alguns tipos, você terá que criar um typedef para usar typeid.

// keyword__typeid_2.cpp
// compile with: /clr
using namespace System;
using namespace System::Security;
using namespace System::Security::Permissions;

typedef int ^ handle_to_int;
typedef int * pointer_to_int;

public ref class MyClass {};

class MyClass2 {};

[attribute(AttributeTargets::All)]
ref class AtClass {
public:
   AtClass(Type ^) {
      Console::WriteLine("in AtClass Type ^ constructor");
   }
};

[attribute(AttributeTargets::All)]
ref class AtClass2 {
public:
   AtClass2() {
      Console::WriteLine("in AtClass2 constructor");
   }
};

// Apply the AtClass and AtClass2 attributes to class B
[AtClass(MyClass::typeid), AtClass2]
[AttributeUsage(AttributeTargets::All)]
ref class B : Attribute {};

int main() {
   Type ^ MyType = B::typeid;

   Console::WriteLine(MyType->IsClass);

   array<Object^>^ MyArray = MyType -> GetCustomAttributes(true);
   for (int i = 0 ; i < MyArray->Length ; i++ )
      Console::WriteLine(MyArray[i]);

   if (int::typeid != pointer_to_int::typeid)
      Console::WriteLine("int::typeid != pointer_to_int::typeid, as expected");

   if (int::typeid == handle_to_int::typeid)
      Console::WriteLine("int::typeid == handle_to_int::typeid, as expected");
}
True

in AtClass2 constructor

in AtClass Type ^ constructor

AtClass2

System.AttributeUsageAttribute

AtClass

int::typeid != pointer_to_int::typeid, as expected

int::typeid == handle_to_int::typeid, as expected

Ver também

Extensões de componente para .NET e UWP