共用方式為


CRuntimeClass 結構

衍生自 CObject 的每個類別都與 CRuntimeClass 結構相關聯,您可以在運行時間用來取得物件或其基類的相關信息。

語法

struct CRuntimeClass

成員

公用方法

名稱 描述
CRuntimeClass::CreateObject 在運行時間建立物件。
CRuntimeClass::FromName 使用熟悉的類別名稱,在運行時間建立 物件。
CRuntimeClass::IsDerivedFrom 判斷類別是否衍生自指定的類別。

公用資料成員

名稱 描述
CRuntimeClass::m_lpszClassName 類別的名稱。
CRuntimeClass::m_nObjectSize 物件大小 (以位元組為單位)。
CRuntimeClass::m_pBaseClass 基類結構的指標 CRuntimeClass
CRuntimeClass::m_pfnCreateObject 動態建立 物件的函式指標。
CRuntimeClass::m_pfnGetBaseClass CRuntimeClass 回 結構(僅適用於動態連結時)。
CRuntimeClass::m_wSchema 類別的架構編號。

備註

CRuntimeClass 是結構,因此沒有基類。

當需要額外類型檢查函式自變數時,或在您必須根據 對象的類別撰寫特殊用途程式代碼時,判斷對象的類別的能力很有用。 C++ 語言並不直接支援執行階段類別資訊。

CRuntimeClass 提供有關相關C++物件的資訊,例如基類的指標 CRuntimeClass ,以及相關類別的 ASCII 類別名稱。 這個結構也會實作各種函式,這些函式可用來動態建立物件、使用熟悉的名稱指定物件的類型,以及判斷相關類別是否衍生自特定類別。

如需使用CRuntimeClass的詳細資訊,請參閱存取運行時間類別資訊一文

繼承階層架構

CRuntimeClass

需求

標頭: afx.h

CRuntimeClass::CreateObject

呼叫此函式,以在運行時間動態建立指定的類別。

CObject* CreateObject();

static CObject* PASCAL CreateObject(LPCSTR lpszClassName);

static CObject* PASCAL CreateObject(LPCWSTR lpszClassName);

參數

lpszClassName
要建立之類別的熟悉名稱。

傳回值

新建立物件的指標,如果找不到類別名稱,或記憶體不足而無法建立物件,則為 NULL。

備註

衍生自 CObject 的類別可以支持動態建立,這是在運行時間建立指定類別的物件的能力。 例如,檔、檢視和框架類別應該支持動態建立。 如需動態建立和CreateObject成員的詳細資訊,請參閱 CObject 類別和 CObject 類別:指定功能層級。

範例

請參閱 IsDerivedFrom範例。

CRuntimeClass::FromName

呼叫此函式以擷 CRuntimeClass 取與熟悉名稱相關聯的結構。

static CRuntimeClass* PASCAL FromName(LPCSTR lpszClassName);

static CRuntimeClass* PASCAL FromName(LPCWSTR lpszClassName);

參數

lpszClassName
衍生自 CObject的類別熟悉名稱。

傳回值

物件的指標CRuntimeClass,對應至傳入 lpszClassName 的名稱。 如果找不到相符的類別名稱,函式會傳回 NULL。

範例

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

呼叫此函式,以判斷呼叫類別是否衍生自 pBaseClass 參數中指定的類別。

BOOL IsDerivedFrom(const CRuntimeClass* pBaseClass) const;

參數

pBaseClass
衍生自 CObject的類別熟悉名稱。

傳回值

如果呼叫 IsDerivedFrom 的類別衍生自結構為參數的 CRuntimeClass 基類,則為TRUE,否則為 FALSE。

備註

關聯性是由成員類別的「步行」決定,從衍生類別鏈結到頂端。 如果找不到基類的相符專案,則此函式只會傳回 FALSE。

注意

若要使用 CRuntimeClass 結構,您必須在您想要擷取運行時間物件資訊的類別實作中包含IMPLEMENT_DYNAMIC、IMPLEMENT_DYNCREATE或IMPLEMENT_SERIAL 巨集。

如需使用CRuntimeClass的詳細資訊,請參閱 CObject 類別:存取運行時間類別資訊一文

範例

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

包含 ASCII 類別名稱的 Null 終止字串。

備註

這個名稱可用來使用 FromName 成員函式建立 類別的實例。

範例

請參閱 IsDerivedFrom範例。

CRuntimeClass::m_nObjectSize

物件的大小,以位元組為單位。

備註

如果物件具有指向已配置記憶體的數據成員,則不包含該記憶體的大小。

範例

請參閱 IsDerivedFrom範例。

CRuntimeClass::m_pBaseClass

如果您的應用程式以靜態方式連結至 MFC,此資料成員會包含基類結構的指標 CRuntimeClass

備註

如果您的應用程式動態連結至 MFC 連結庫,請參閱 m_pfnGetBaseClass

範例

請參閱 IsDerivedFrom範例。

CRuntimeClass::m_pfnCreateObject

建立類別物件之預設建構函式的函式指標。

備註

只有當 類別支持動態建立時,這個指標才有效;否則,函式會傳回NULL。

CRuntimeClass::m_pfnGetBaseClass

如果您的應用程式使用 MFC 連結庫做為共用 DLL,此資料成員會指向傳回 CRuntimeClass 基類結構的函式。

備註

如果您的應用程式以靜態方式連結至 MFC 連結庫,請參閱 m_pBaseClass

範例

請參閱 IsDerivedFrom範例。

CRuntimeClass::m_wSchema

架構編號 (不可串行化類別的 -1)。

備註

如需架構編號的詳細資訊,請參閱 IMPLEMENT_SERIAL 巨集。

範例

請參閱 IsDerivedFrom範例。

另請參閱

階層架構圖表
CObject::GetRuntimeClass
CObject::IsKindOf
RUNTIME_CLASS
IMPLEMENT_DYNAMIC
IMPLEMENT_DYNCREATE
IMPLEMENT_SERIAL