C++ Builder 参考手册 ➙ System ➙ TObject ➙ ClassName
头文件:#include <systobj.h>
命名空间:System
函数原型:
__classmethod UnicodeString __fastcall ClassName();
System::TObject::ClassName 是 System::TObject 的成员函数,
- 返回类名,不包含命名空间;
- 通过父类指针获取到的类名是子类的类名;
- 支持 UNICODE,类名可以是中文或其他国家的语言,不仅仅是英文。
例1:通过父类指针获取到的是子类的类名,即真实的类名
这个例子通过 TObject 指针获取产生这个事件的控件的真实的类名和含有命名空间的类名。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Memo1->Lines->Add(Sender->ClassName());
Memo1->Lines->Add(Sender->QualifiedClassName());
}
运行结果:
- 得到了产生事件的控件的类名是 TButton,含有命名空间的类名是 Vcl.StdCtrls.TButton;
- 含有命名空间的类名在各部分之间分割都是
"."
,而不是"::"
,TObject 的 QualifiedClassName 方法始终应用 Delphi 命名规则; - 命名空间的名称是对的,大小写和实际的不符,原因是这个控件是用 Delphi 编译出来的,Delphi 不需要区分大小写。
例2:测试自己写的类的类名,测试 UNICODE 类名
namespace 玄坴 {
namespace HsuanLu {
class 测试类 : public TObject
{
public:
__fastcall 测试类()
{
}
};
}
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
玄坴::HsuanLu::测试类 *pObj = new 玄坴::HsuanLu::测试类;
Memo1->Lines->Add(pObj->ClassName());
Memo1->Lines->Add(pObj->QualifiedClassName());
delete pObj;
}
运行结果:
参考:
- System::TObject::QualifiedClassName
- System::TObject::ClassNameIs
- System::TObject::UnitName
- System::TObject::UnitScope
- System::TObject::ClassInfo
- System::TObject::ClassType
- System::TObject
- VCL 类继承关系
C++ Builder 参考手册 ➙ System ➙ TObject ➙ ClassName