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

Mendapatkan nilai yang menunjukkan jenis objek.

Catatan

Topik ini mengacu pada versi typeid Ekstensi Komponen C++. Untuk versi ISO C++ kata kunci ini, lihat Operator typeid.

Semua Runtime

Sintaks

T::typeid

Parameter

T
Nama jenis.

Windows Runtime

Sintaks

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

Parameter

T
Nama jenis.

Keterangan

Di C++/CX, typeid mengembalikan Platform::Type yang dibangun dari informasi jenis runtime.

Persyaratan

Opsi pengkompilasi: /ZW

Runtime Bahasa Umum

Sintaks

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

Parameter

jenis
Nama jenis (deklarator abstrak) yang objeknya System::Type Anda inginkan.

Keterangan

typeid digunakan untuk mendapatkan Type jenis pada waktu kompilasi.

typeid mirip dengan mendapatkan System::Type jenis saat run time menggunakan GetType atau GetType. Namun, typeid hanya menerima nama jenis sebagai parameter. Jika Anda ingin menggunakan instans jenis untuk mendapatkan namanya System::Type , gunakan GetType.

typeid harus dapat mengevaluasi nama jenis (jenis) pada waktu kompilasi, sedangkan GetType mengevaluasi jenis yang akan dikembalikan pada waktu proses.

typeid dapat mengambil nama jenis asli atau alias runtime bahasa umum untuk nama jenis asli; lihat .NET Framework Setara dengan C++ Native Type (C++/CLI) untuk informasi selengkapnya.

typeid juga berfungsi dengan jenis asli, meskipun masih akan mengembalikan System::Type. Untuk mendapatkan struktur type_info, gunakan typeid Operator.

Persyaratan

Opsi pengkompilasi: /clr

Contoh

Contoh berikut membandingkan kata kunci typeid dengan GetType() anggota.

// 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*

Sampel berikut menunjukkan bahwa variabel jenis System::Type dapat digunakan untuk mendapatkan atribut pada jenis. Ini juga menunjukkan bahwa untuk beberapa jenis, Anda harus membuat typedef untuk menggunakan 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

Baca juga

Ekstensi Komponen untuk .NET dan UWP