Udostępnij za pośrednictwem


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 CObjectklasy .

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 CObjectklasy .

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