Megosztás a következőn keresztül:


CRuntimeClass struktúra

Megjegyzés:

A Microsoft Foundation Classes (MFC) könyvtár továbbra is támogatott. A továbbiakban azonban nem adunk hozzá funkciókat, és nem frissítjük a dokumentációt.

Minden származtatott CObject osztály egy CRuntimeClass olyan struktúrához van társítva, amellyel futtatáskor információkat szerezhet be egy objektumról vagy annak alaposztályáról.

Szemantika

struct CRuntimeClass

Tagok

Nyilvános metódusok

Név Description
CRuntimeClass::CreateObject Objektumot hoz létre futás közben.
CRuntimeClass::FromName Létrehoz egy objektumot futás közben az ismerős osztálynév használatával.
CRuntimeClass::IsDerivedFrom Meghatározza, hogy az osztály a megadott osztályból származik-e.

Nyilvános adatok tagjai

Név Description
CRuntimeClass::m_lpszClassName Az osztály neve.
CRuntimeClass::m_nObjectSize Az objektum mérete bájtban.
CRuntimeClass::m_pBaseClass Az alaposztály szerkezetére mutató mutató CRuntimeClass .
CRuntimeClass::m_pfnCreateObject Az objektumot dinamikusan létrehozó függvényre mutató mutató.
CRuntimeClass::m_pfnGetBaseClass Visszaadja a struktúrát CRuntimeClass (csak dinamikusan összekapcsolt állapotban érhető el).
CRuntimeClass::m_wSchema Az osztály sémaszáma.

Megjegyzések

CRuntimeClass egy struktúra, ezért nem rendelkezik alaposztálysal.

Az objektum osztályának futásidőben történő meghatározására akkor van szükség, ha a függvényargumentumok további típusellenőrzésére van szükség, vagy ha speciális célú kódot kell írnia egy objektum osztálya alapján. A futásidejű osztály adatait közvetlenül a C++ nyelv nem támogatja.

CRuntimeClass információkat nyújt a kapcsolódó C++ objektumról, például az CRuntimeClass alaposztály mutatóját és a kapcsolódó osztály ASCII-osztálynevét. Ez a struktúra különböző függvényeket is implementál, amelyekkel dinamikusan hozhat létre objektumokat, egy ismerős névvel megadhatja az objektum típusát, és meghatározza, hogy a kapcsolódó osztály egy adott osztályból származik-e.

További információ a használatról CRuntimeClass: Accessing Run-Time Class Information.

Öröklési hierarchia

CRuntimeClass

Requirements

Fejléc: afx.h

CRuntimeClass::CreateObject

Hívja meg ezt a függvényt, hogy dinamikusan hozza létre a megadott osztályt a futási idő alatt.

CObject* CreateObject();

static CObject* PASCAL CreateObject(LPCSTR lpszClassName);

static CObject* PASCAL CreateObject(LPCWSTR lpszClassName);

Paraméterek

lpszClassName
A létrehozandó osztály ismerős neve.

Visszaadott érték

Mutató az újonnan létrehozott objektumra vagy NULL értékre, ha az osztály neve nem található, vagy nincs elegendő memória az objektum létrehozásához.

Megjegyzések

A származtatott CObject osztályok támogathatják a dinamikus létrehozást, ami egy adott osztály objektumának futásidőben történő létrehozását teszi lehetővé. A dokumentum-, nézet- és keretosztályoknak például támogatniuk kell a dinamikus létrehozást. További információ a dinamikus létrehozásról és a CreateObject tagról: CObject class and CObject Class: Specifying Levels of Functionality.

Example

Lásd az IsDerivedFrom példát.

CRuntimeClass::FromName

Hívja meg ezt a függvényt az CRuntimeClass ismerős névhez társított struktúra lekéréséhez.

static CRuntimeClass* PASCAL FromName(LPCSTR lpszClassName);

static CRuntimeClass* PASCAL FromName(LPCWSTR lpszClassName);

Paraméterek

lpszClassName
Egy osztály ismerős neve, amelyből CObjectszármazik.

Visszaadott érték

Egy objektumra mutató CRuntimeClass mutató, amely megfelel az lpszClassName fájlban átadott névnek. A függvény null értéket ad vissza, ha nem található egyező osztálynév.

Example

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

Hívja meg ezt a függvényt annak megállapításához, hogy a hívóosztály a pBaseClass paraméterben megadott osztályból származik-e.

BOOL IsDerivedFrom(const CRuntimeClass* pBaseClass) const;

Paraméterek

pBaseClass
Egy osztály ismerős neve, amelyből CObjectszármazik.

Visszaadott érték

IGAZ, ha az osztályhívás IsDerivedFrom abból az alaposztályból származik, amelynek CRuntimeClass struktúrája paraméterként van megadva, ellenkező esetben HAMIS.

Megjegyzések

A kapcsolatot az határozza meg, hogy a tag osztályától kezdve a származtatott osztályok láncolatán végig a legfelsőig "sétál". Ez a függvény csak akkor ad vissza HAMIS értéket, ha nem található egyezés az alaposztályhoz.

Megjegyzés:

A CRuntimeClass struktúra használatához bele kell foglalnia a IMPLEMENT_DYNAMIC, IMPLEMENT_DYNCREATE vagy IMPLEMENT_SERIAL makrót annak az osztálynak az implementációjában, amelynek futásidejű objektumadatait le szeretné kérni.

További információ a használatról CRuntimeClass: CObject Class: Accessing Run-Time Class Information.

Example

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

Az ASCII-osztálynevet tartalmazó null értékű sztring.

Megjegyzések

Ezzel a névvel létrehozhatja az osztály egy példányát a FromName tagfüggvény használatával.

Example

Lásd az IsDerivedFrom példát.

CRuntimeClass::m_nObjectSize

Az objektum mérete bájtban.

Megjegyzések

Ha az objektumnak vannak olyan adattagok, amelyek a lefoglalt memóriára mutatnak, a rendszer nem tartalmazza a memória méretét.

Example

Lásd az IsDerivedFrom példát.

CRuntimeClass::m_pBaseClass

Ha az alkalmazás statikusan kapcsolódik az MFC-hez, ez az adattag az alaposztály szerkezetére mutató mutatót CRuntimeClass tartalmaz.

Megjegyzések

Ha az alkalmazás dinamikusan kapcsolódik az MFC-kódtárhoz, tekintse meg a m_pfnGetBaseClass.

Example

Lásd az IsDerivedFrom példát.

CRuntimeClass::m_pfnCreateObject

Az osztály objektumát létrehozó alapértelmezett konstruktorra mutató függvény.

Megjegyzések

Ez a mutató csak akkor érvényes, ha az osztály támogatja a dinamikus létrehozást; ellenkező esetben a függvény NULL értéket ad vissza.

CRuntimeClass::m_pfnGetBaseClass

Ha az alkalmazás megosztott DLL-ként használja az MFC-kódtárat, ez az adattag egy olyan függvényre mutat, amely az CRuntimeClass alaposztály szerkezetét adja vissza.

Megjegyzések

Ha az alkalmazás statikusan kapcsolódik az MFC-kódtárhoz, tekintse meg m_pBaseClass.

Example

Lásd az IsDerivedFrom példát.

CRuntimeClass::m_wSchema

A sémaszám (-1 nemializálható osztályok esetén).

Megjegyzések

A sémaszámokról további információt a IMPLEMENT_SERIAL makróban talál.

Example

Lásd az IsDerivedFrom példát.

Lásd még

hierarchiadiagram
CObject::GetRuntimeClass
CObject::IsKindOf
RUNTIME_CLASS
IMPLEMENT_DYNAMIC
IMPLEMENT_DYNCREATE
IMPLEMENT_SERIAL