我所谓的virtual并不是声明的时候的virtual。
请看ClassName的实现。
class function TObject.ClassName: ShortString;
asm
{ -> EAX VMT }
{ EDX Pointer to result string }
PUSH ESI
PUSH EDI
MOV EDI,EDX
MOV ESI,[EAX].vmtClassName //注意这里
XOR ECX,ECX
MOV CL,[ESI]
INC ECX
REP MOVSB
POP EDI
POP ESI
end;
另外,你的例子中的写法不妥。
如果这么些,你看看结果。
Caption := Button1.ClassName;