Struktura CRuntimeClass
Każda klasa pochodząca z CObject
klasy jest skojarzona ze strukturą CRuntimeClass
, której można użyć do uzyskiwania informacji o obiekcie lub jego klasie bazowej w czasie wykonywania.
Składnia
struct CRuntimeClass
Elementy członkowskie
Metody publiczne
Nazwa/nazwisko | opis |
---|---|
CRuntimeClass::CreateObject | Tworzy obiekt w czasie wykonywania. |
CRuntimeClass::FromName | Tworzy obiekt w czasie wykonywania przy użyciu znanej nazwy klasy. |
CRuntimeClass::IsDerivedFrom | Określa, czy klasa pochodzi z określonej klasy. |
Publiczne elementy członkowskie danych
Nazwa/nazwisko | opis |
---|---|
CRuntimeClass::m_lpszClassName | Nazwa klasy. |
CRuntimeClass::m_nObjectSize | Rozmiar obiektu w bajtach. |
CRuntimeClass::m_pBaseClass | Wskaźnik do CRuntimeClass struktury klasy bazowej. |
CRuntimeClass::m_pfnCreateObject | Wskaźnik do funkcji, która dynamicznie tworzy obiekt. |
CRuntimeClass::m_pfnGetBaseClass | CRuntimeClass Zwraca strukturę (dostępną tylko w przypadku dynamicznego połączenia). |
CRuntimeClass::m_wSchema | Numer schematu klasy. |
Uwagi
CRuntimeClass
jest strukturą i dlatego nie ma klasy bazowej.
Możliwość określenia klasy obiektu w czasie wykonywania jest przydatna, gdy potrzebne jest dodatkowe sprawdzanie typów argumentów funkcji lub kiedy trzeba napisać kod specjalnego przeznaczenia na podstawie klasy obiektu. Informacje o klasie czasu wykonywania nie są obsługiwane bezpośrednio przez język C++.
CRuntimeClass
Zawiera informacje na temat powiązanego obiektu C++, takiego jak wskaźnik do CRuntimeClass
klasy bazowej i nazwa klasy ASCII powiązanej klasy. Ta struktura implementuje również różne funkcje, które mogą służyć do dynamicznego tworzenia obiektów, określania typu obiektu przy użyciu znanej nazwy i określania, czy powiązana klasa pochodzi z określonej klasy.
Aby uzyskać więcej informacji na temat korzystania z programu CRuntimeClass
, zobacz artykuł Uzyskiwanie dostępu do informacji o klasie czasu wykonywania.
Hierarchia dziedziczenia
CRuntimeClass
Wymagania
Nagłówek: afx.h
CRuntimeClass::CreateObject
Wywołaj tę funkcję, aby dynamicznie utworzyć określoną klasę w czasie wykonywania.
CObject* CreateObject();
static CObject* PASCAL CreateObject(LPCSTR lpszClassName);
static CObject* PASCAL CreateObject(LPCWSTR lpszClassName);
Parametry
lpszClassName
Znana nazwa klasy do utworzenia.
Wartość zwracana
Wskaźnik do nowo utworzonego obiektu lub wartość NULL, jeśli nazwa klasy nie zostanie znaleziona lub nie ma wystarczającej ilości pamięci do utworzenia obiektu.
Uwagi
Klasy pochodne CObject
mogą obsługiwać tworzenie dynamiczne, czyli możliwość tworzenia obiektu określonej klasy w czasie wykonywania. Na przykład klasy dokumentów, widoków i ramek powinny obsługiwać tworzenie dynamiczne. Aby uzyskać więcej informacji na temat tworzenia dynamicznego CreateObject
i składowej, zobacz Klasa CObject i Klasa CObject: Określanie poziomów funkcjonalności.
Przykład
Zobacz przykład IsDerivedFrom.
CRuntimeClass::FromName
Wywołaj tę funkcję, aby pobrać CRuntimeClass
strukturę skojarzona ze znaną nazwą.
static CRuntimeClass* PASCAL FromName(LPCSTR lpszClassName);
static CRuntimeClass* PASCAL FromName(LPCWSTR lpszClassName);
Parametry
lpszClassName
Znana nazwa klasy pochodzącej z CObject
klasy .
Wartość zwracana
Wskaźnik do CRuntimeClass
obiektu, odpowiadający nazwie przekazanej w lpszClassName. Funkcja zwraca wartość NULL, jeśli nie znaleziono pasującej nazwy klasy.
Przykład
// 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
Wywołaj tę funkcję, aby określić, czy klasa wywołująca pochodzi z klasy określonej w parametrze pBaseClass .
BOOL IsDerivedFrom(const CRuntimeClass* pBaseClass) const;
Parametry
pBaseClass
Znana nazwa klasy pochodzącej z CObject
klasy .
Wartość zwracana
WARTOŚĆ TRUE, jeśli wywołanie IsDerivedFrom
klasy pochodzi z klasy bazowej, której CRuntimeClass
struktura jest podana jako parametr; w przeciwnym razie FALSE.
Uwagi
Relacja jest określana przez "chodzenie" z klasy składowej w górę łańcucha klas pochodnych aż do góry. Ta funkcja zwraca wartość FALSE tylko wtedy, gdy nie znaleziono dopasowania dla klasy bazowej.
Uwaga
Aby użyć CRuntimeClass
struktury, należy uwzględnić IMPLEMENT_DYNAMIC, IMPLEMENT_DYNCREATE lub makro IMPLEMENT_SERIAL w implementacji klasy, dla której chcesz pobrać informacje o obiekcie czasu wykonywania.
Aby uzyskać więcej informacji na temat korzystania z klasy CRuntimeClass
, zobacz artykuł CObject Class: Accessing Run-Time Class Information (Klasa CObject: uzyskiwanie dostępu do informacji o klasie czasu wykonywania).
Przykład
// 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
Ciąg o wartości null zawierający nazwę klasy ASCII.
Uwagi
Ta nazwa może służyć do tworzenia wystąpienia klasy przy użyciu funkcji składowej FromName
.
Przykład
Zobacz przykład IsDerivedFrom.
CRuntimeClass::m_nObjectSize
Rozmiar obiektu w bajtach.
Uwagi
Jeśli obiekt zawiera elementy członkowskie danych wskazujące przydzieloną pamięć, rozmiar tej pamięci nie jest uwzględniony.
Przykład
Zobacz przykład IsDerivedFrom.
CRuntimeClass::m_pBaseClass
Jeśli aplikacja statycznie łączy się z MFC, ten element członkowski danych zawiera wskaźnik do CRuntimeClass
struktury klasy bazowej.
Uwagi
Jeśli aplikacja dynamicznie łączy się z biblioteką MFC, zobacz m_pfnGetBaseClass.
Przykład
Zobacz przykład IsDerivedFrom.
CRuntimeClass::m_pfnCreateObject
Wskaźnik funkcji do domyślnego konstruktora, który tworzy obiekt klasy.
Uwagi
Ten wskaźnik jest prawidłowy tylko wtedy, gdy klasa obsługuje tworzenie dynamiczne; w przeciwnym razie funkcja zwraca wartość NULL.
CRuntimeClass::m_pfnGetBaseClass
Jeśli aplikacja używa biblioteki MFC jako udostępnionej biblioteki DLL, ten element członkowski danych wskazuje funkcję zwracającą CRuntimeClass
strukturę klasy bazowej.
Uwagi
Jeśli aplikacja statycznie łączy się z biblioteką MFC, zobacz m_pBaseClass.
Przykład
Zobacz przykład IsDerivedFrom.
CRuntimeClass::m_wSchema
Numer schematu ( -1 dla klas nieserializowalnych).
Uwagi
Aby uzyskać więcej informacji na temat numerów schematów, zobacz makro IMPLEMENT_SERIAL .
Przykład
Zobacz przykład IsDerivedFrom.
Zobacz też
Wykres hierarchii
CObject::GetRuntimeClass
CObject::IsKindOf
RUNTIME_CLASS
IMPLEMENT_DYNAMIC
IMPLEMENT_DYNCREATE
IMPLEMENT_SERIAL