TObject是VCL类库中所有类的父类,它提供一些对象方法用于返回类信息和一些虚方法能够在其派生类重载。TObject的特殊地位是它具有某些特殊功能,例如,用户可以使用TObject数据类型代替VCL中任何数据类型,因为每个类都是从TObject类中派生出来的。这个功能的典型应用是,在C++Builder的组件的事件处理函数通常具备一个TObject类型的Sender参数,通过这个参数可以实现事件处理函数的重用。但是,TObject类型的变量或参数仅仅能够问TObject定义的方法和属性,例如,如果Sender参数的实际引用是一个TLabel对象,直接访问Sender->Caption将会出现错误。解决这个问题应该使用类的强制转换,在强制转换之前,还可以使用TObject类的ClassNameIs对象方法来检验参数的实际数据类型。例如下面的代码:
if (Sender->ClassNameIs("TLabel"))
(TLabel*)Sender->Caption = "A Label";
TObject类不具备属性,下面介绍TObject类几个有用的对象方法。
(1)ClassName方法。
声明:typedef TMetaClass * Tclass;
static ShortString __fastcall ClassName(TClass cls);
ShortString __fastcall ClassName() {return ClassName(ClassType());}
这个函数返回对象实例的类名。对于VCL中任何一个类,可以调用这个基类TObject的函数,将返回该类的实际类名。
ClassName对象方法是通过TClass类引用实现的。
(2)ClassNameIs方法。
声明:typedef TMetaClass* TClass;
static bool __fastcall ClassNameIs(TClass cls, const AnsiString String);
bool __fastcall ClassNameIs(const AnsiString string) {return ClassNameIs(ClassType(),string);}
这个函数用于判断对象的类型是否指定的类型。
(3)ClassParent方法。
声明:typedefTMetaClass* TClass;
static TClass __fastcall ClassParent(TClass cls);
TClass __fastcall ClassParent() {return ClassParent(ClassType());}
该方法返回对象的父类类型。
(4)Dispatch方法。
声明:virtual void __fastcall Dispatch(void *Message);
这是一个虚方法。该方法与实现Windows消息机制密切相关。该函数用于调用对象的消息处理方法,实际调用方法由Message参数指定的消息来决定。
(5)InheritsFrom方法。
声明:typedef TMetaClass* TClass;
static bool __fastcall InheritsFrom(TClass cls, TClass aClass);
bool __fastcall InheritsFrom(TClass aClass) {return InheritsFrom(ClassType(),aClass);}
此函数用于判断两个对象的继承关系。如果aClass指定的类是对象的基类,则返回true,否则返回false;
(6)InstanceSize。
声明:typedef TMetaClass* TClass;
static long __fastcall InstanceSize(TClass cls);
long __fastcall InstanceSize(){return InstanceSize(ClassType());}
该类返回对象运行时的大小。其效果等同于使用sizeof关键字。
可以看到,TObject类具有很多优异特性。在多数时候,当需要创建一个新类,从TObject类继承会比直接创建效果好,这样做可以使所创建对象自动获得许多有用特性。
转载于:https://blog.51cto.com/hthinker/1743029