typeid (C++/CLI ve C++/CX)
Bir nesnenin türünü gösteren bir değer alır.
Not
Bu konu, tür kimliğinin C++ Bileşen Uzantıları sürümünü ifade eder. Bu anahtar sözcüğün ISO C++ sürümü için bkz . typeid İşleci.
Tüm Çalışma Zamanları
Sözdizimi
T::typeid
Parametreler
T
Bir tür adı.
Windows Çalışma Zamanı
Sözdizimi
Platform::Type^ type = T::typeid;
Parametreler
T
Bir tür adı.
Açıklamalar
C++/CX'te typeid, çalışma zamanı türü bilgilerinden oluşturulan platform ::Type değerini döndürür.
Gereksinimler
Derleyici seçeneği: /ZW
Ortak Dil Çalışma Zamanı
Sözdizimi
System::Type^ type = T::typeid;
Parametreler
type
Nesnesini istediğiniz System::Type
türün adı (soyut bildirimci).
Açıklamalar
typeid
derleme zamanında bir tür için öğesini almak Type için kullanılır.
typeid
, veya GetTypekullanarak GetType bir tür için çalışma zamanında alma System::Type
işlemine benzer. Ancak, typeid
yalnızca bir tür adını parametre olarak kabul eder. Adını almak System::Type
için bir tür örneği kullanmak istiyorsanız kullanın GetType
.
typeid
derleme zamanında tür adını (tür) değerlendirebilmesi gerekirken, GetType çalışma zamanında döndürülecek türü değerlendirir.
typeid
yerel tür adı veya yerel tür adı için ortak dil çalışma zamanı diğer adı alabilir; Daha fazla bilgi için bkz. .NET Framework C++ Yerel Türlerine Eşdeğerler (C++/CLI).
typeid
yerel türlerle de çalışır, ancak yine de döndürür System::Type
. type_info bir yapı elde etmek için İşleç'i kullanıntypeid
.
Gereksinimler
Derleyici seçeneği: /clr
Örnekler
Aşağıdaki örnek typeid anahtar sözcüğünü üyeyle GetType()
karşılaştırır.
// 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*
Aşağıdaki örnekte, bir türdeki öznitelikleri almak için System::Type türünde bir değişkenin kullanılabileceğini gösterir. Ayrıca, bazı türlerde kullanmak typeid
için bir typedef oluşturmanız gerekeceğini gösterir.
// 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