Udostępnij za pośrednictwem


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

Pobiera wartość wskazującą typ obiektu.

Uwaga

W tym temacie odwołuje się do wersji typeid rozszerzeń składników języka C++. Aby zapoznać się z wersją tego słowa kluczowego ISO C++, zobacz typeid Operator.

Wszystkie środowiska wykonawcze

Składnia

T::typeid

Parametry

T
Nazwa typu.

Środowisko wykonawcze systemu Windows

Składnia

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

Parametry

T
Nazwa typu.

Uwagi

W języku C++/CX typeid zwraca wartość Platform::Type skonstruowaną z informacji o typie środowiska uruchomieniowego.

Wymagania

Opcja kompilatora: /ZW

środowiska uruchomieniowe w trakcie wykonania

Składnia

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

Parametry

type
Nazwa typu (deklaratora abstrakcyjnego), dla którego chcesz uzyskać System::Type obiekt.

Uwagi

typeid służy do pobierania Type elementu dla typu w czasie kompilacji.

typeid jest podobny do pobierania System::Type dla typu w czasie wykonywania przy użyciu polecenia GetType lub GetType. typeid Jednak akceptuje tylko nazwę typu jako parametr. Jeśli chcesz użyć wystąpienia typu, aby uzyskać jego System::Type nazwę, użyj polecenia GetType.

typeid Musi być w stanie ocenić nazwę typu (typ) w czasie kompilacji, natomiast funkcja GetType ocenia typ, który ma zostać zwrócony w czasie wykonywania.

typeidmoże przyjmować natywną nazwę typu lub alias środowiska uruchomieniowego języka wspólnego dla nazwy typu natywnego; Aby uzyskać więcej informacji, zobacz Odpowiedniki programu .NET Framework dla typów natywnych języka C++ (C++/CLI).

typeid działa również z typami natywnymi, chociaż nadal będzie zwracać wartość System::Type. Aby uzyskać strukturę type_info, użyj operatoratypeid.

Wymagania

Opcja kompilatora: /clr

Przykłady

Poniższy przykład porównuje słowo kluczowe typeid z elementem GetType() członkowskim.

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

W poniższym przykładzie pokazano, że zmienna typu System::Type może służyć do pobierania atrybutów typu. Pokazuje również, że w przypadku niektórych typów należy utworzyć definicję typów, aby użyć polecenia 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

Zobacz też

Rozszerzenia składników dla platformy .NET i platformy uniwersalnej systemu Windows