CRuntimeClass-Struktur
Jede abgeleitete Klasse ist einer CRuntimeClass
Struktur zugeordnet, mit CObject
der Sie Informationen zu einem Objekt oder seiner Basisklasse zur Laufzeit abrufen können.
Syntax
struct CRuntimeClass
Member
Öffentliche Methoden
Name | Beschreibung |
---|---|
CRuntimeClass::CreateObject | Erstellt ein Objekt während der Laufzeit. |
CRuntimeClass::FromName | Erstellt ein Objekt während der Laufzeit unter Verwendung des bekannten Klassennamens. |
CRuntimeClass::IsDerivedFrom | Bestimmt, ob die Klasse von der angegebenen Klasse abgeleitet wird. |
Öffentliche Datenmember
Name | Beschreibung |
---|---|
CRuntimeClass::m_lpszClassName | Der Name der Klasse. |
CRuntimeClass::m_nObjectSize | Die Größe des Objekts in Bytes. |
CRuntimeClass::m_pBaseClass | Ein Zeiger auf die CRuntimeClass Struktur der Basisklasse. |
CRuntimeClass::m_pfnCreateObject | Ein Zeiger auf die Funktion, die das Objekt dynamisch erstellt. |
CRuntimeClass::m_pfnGetBaseClass | Gibt die CRuntimeClass Struktur zurück (nur verfügbar, wenn dynamisch verknüpft). |
CRuntimeClass::m_wSchema | Die Schemanummer der Klasse. |
Hinweise
CRuntimeClass
ist eine Struktur und verfügt daher nicht über eine Basisklasse.
Die Möglichkeit, die Klasse eines Objekts zur Laufzeit zu ermitteln, ist nützlich, wenn eine zusätzliche Typüberprüfung von Funktionsargumenten erforderlich ist oder wenn Sie speziellen Code basierend auf der Klasse eines Objekts schreiben müssen. Laufzeitklasseninformationen werden nicht direkt von der C++-Sprache unterstützt.
CRuntimeClass
stellt Informationen zum zugehörigen C++-Objekt bereit, z. B. einen Zeiger auf die CRuntimeClass
Basisklasse und den ASCII-Klassennamen der zugehörigen Klasse. Diese Struktur implementiert auch verschiedene Funktionen, die zum dynamischen Erstellen von Objekten verwendet werden können, die Angabe des Objekttyps mithilfe eines vertrauten Namens und bestimmen, ob die zugehörige Klasse von einer bestimmten Klasse abgeleitet wird.
Weitere Informationen zur Verwendung CRuntimeClass
finden Sie im Artikel "Zugreifen auf Laufzeitklasseninformationen".
Vererbungshierarchie
CRuntimeClass
Anforderungen
Header: afx.h
CRuntimeClass::CreateObject
Rufen Sie diese Funktion auf, um die angegebene Klasse während der Laufzeit dynamisch zu erstellen.
CObject* CreateObject();
static CObject* PASCAL CreateObject(LPCSTR lpszClassName);
static CObject* PASCAL CreateObject(LPCWSTR lpszClassName);
Parameter
lpszClassName
Der vertraute Name der zu erstellenden Klasse.
Rückgabewert
Ein Zeiger auf das neu erstellte Objekt oder NULL, wenn der Klassenname nicht gefunden wird oder nicht genügend Arbeitsspeicher zum Erstellen des Objekts vorhanden ist.
Hinweise
Von abgeleiteten CObject
Klassen können die dynamische Erstellung unterstützen. Dies ist die Möglichkeit, ein Objekt einer angegebenen Klasse zur Laufzeit zu erstellen. Dokument-, Ansichts- und Frameklassen sollten z. B. die dynamische Erstellung unterstützen. Weitere Informationen zur dynamischen Erstellung und zum CreateObject
Element finden Sie unter CObject Class and CObject Class: Specifying Levels of Functionality.
Beispiel
Sehen Sie sich das Beispiel für IsDerivedFrom an.
CRuntimeClass::FromName
Rufen Sie diese Funktion auf, um die Struktur abzurufen, die CRuntimeClass
dem vertrauten Namen zugeordnet ist.
static CRuntimeClass* PASCAL FromName(LPCSTR lpszClassName);
static CRuntimeClass* PASCAL FromName(LPCWSTR lpszClassName);
Parameter
lpszClassName
Der bekannte Name einer Klasse, die von CObject
.
Rückgabewert
Ein Zeiger auf ein CRuntimeClass
Objekt, das dem Namen entspricht, der in lpszClassName übergeben wird. Die Funktion gibt NULL zurück, wenn kein übereinstimmender Klassenname gefunden wurde.
Beispiel
// This example creates an object if CAge is defined.
CRuntimeClass* pClass = CRuntimeClass::FromName(_T("CAge"));
if (pClass == NULL)
{
// not found, display a warning for diagnostic purposes
AfxMessageBox(_T("Warning: CMyClass not defined"));
return NULL;
}
// attempt to create the object with the found CRuntimeClass
CObject* pObject = pClass->CreateObject();
CRuntimeClass::IsDerivedFrom
Rufen Sie diese Funktion auf, um zu ermitteln, ob die aufrufende Klasse von der im Parameter "pBaseClass " angegebenen Klasse abgeleitet wird.
BOOL IsDerivedFrom(const CRuntimeClass* pBaseClass) const;
Parameter
pBaseClass
Der bekannte Name einer Klasse, die von CObject
.
Rückgabewert
TRUE, wenn der Aufruf IsDerivedFrom
der Klasse von der Basisklasse abgeleitet wird, deren CRuntimeClass
Struktur als Parameter angegeben wird; andernfalls FALSE.
Hinweise
Die Beziehung wird durch "Walking" von der Klasse des Mitglieds bis hin zur Kette abgeleiteter Klassen bestimmt. Diese Funktion gibt nur FALSE zurück, wenn keine Übereinstimmung für die Basisklasse gefunden wird.
Hinweis
Um die CRuntimeClass
Struktur zu verwenden, müssen Sie das IMPLEMENT_DYNAMIC, IMPLEMENT_DYNCREATE oder IMPLEMENT_SERIAL Makro in die Implementierung der Klasse einschließen, für die Sie Laufzeitobjektinformationen abrufen möchten.
Weitere Informationen zur Verwendung CRuntimeClass
finden Sie im Artikel CObject-Klasse: Zugreifen auf Laufzeitklasseninformationen.
Beispiel
// This example creates an object from the run-time class. It only
// creates objects derived from CWnd.
// We only want to create an object derived from CWnd.
if (!pClass->IsDerivedFrom(RUNTIME_CLASS(CWnd)))
{
TRACE(_T("Error; Object %s is not derived from CWnd\n"),
pClass->m_lpszClassName);
return FALSE;
}
// Get a pointer to the base class CRuntimeClass.
#ifdef _AFXDLL
CRuntimeClass* pBaseClass = pClass->m_pfnGetBaseClass();
#else
CRuntimeClass* pBaseClass = pClass->m_pBaseClass;
#endif
ASSERT(pBaseClass != NULL);
TRACE("Creating object %s derived from %s, with object size %d "
"and schema %d\n", pClass->m_lpszClassName,
pBaseClass->m_lpszClassName, pClass->m_nObjectSize,
pClass->m_wSchema);
// Create the object.
CObject* pObject = pClass->CreateObject();
CRuntimeClass::m_lpszClassName
Eine mit Null beendete Zeichenfolge, die den ASCII-Klassennamen enthält.
Hinweise
Dieser Name kann verwendet werden, um eine Instanz der Klasse mithilfe der FromName
Memberfunktion zu erstellen.
Beispiel
Sehen Sie sich das Beispiel für IsDerivedFrom an.
CRuntimeClass::m_nObjectSize
Die Größe des Objekts in Byte.
Hinweise
Wenn das Objekt Datenmmber enthält, die auf den zugeordneten Speicher verweisen, ist die Größe dieses Speichers nicht enthalten.
Beispiel
Sehen Sie sich das Beispiel für IsDerivedFrom an.
CRuntimeClass::m_pBaseClass
Wenn Die Anwendung statisch mit MFC verknüpft ist, enthält dieses Datenmemm einen Zeiger auf die CRuntimeClass
Struktur der Basisklasse.
Hinweise
Wenn Ihre Anwendung dynamisch mit der MFC-Bibliothek verknüpft ist, lesen Sie m_pfnGetBaseClass.
Beispiel
Sehen Sie sich das Beispiel für IsDerivedFrom an.
CRuntimeClass::m_pfnCreateObject
Ein Funktionszeiger auf den Standardkonstruktor, der ein Objekt Ihrer Klasse erstellt.
Hinweise
Dieser Zeiger ist nur gültig, wenn die Klasse die dynamische Erstellung unterstützt. andernfalls gibt die Funktion NULL zurück.
CRuntimeClass::m_pfnGetBaseClass
Wenn Ihre Anwendung die MFC-Bibliothek als freigegebene DLL verwendet, verweist dieses Datenelement auf eine Funktion, die die CRuntimeClass
Struktur der Basisklasse zurückgibt.
Hinweise
Wenn Ihre Anwendung statisch mit der MFC-Bibliothek verknüpft ist, lesen Sie m_pBaseClass.
Beispiel
Sehen Sie sich das Beispiel für IsDerivedFrom an.
CRuntimeClass::m_wSchema
Die Schemanummer ( -1 für nicht ialisierbare Klassen).
Hinweise
Weitere Informationen zu Schemanummern finden Sie im IMPLEMENT_SERIAL Makro.
Beispiel
Sehen Sie sich das Beispiel für IsDerivedFrom an.
Siehe auch
Hierarchiediagramm
CObject::GetRuntimeClass
CObject::IsKindOf
RUNTIME_CLASS
IMPLEMENT_DYNAMIC
IMPLEMENT_DYNCREATE
IMPLEMENT_SERIAL