歡迎大家在此討論討論下類函數,可以學習學習!

解决方案 »

  1.   

    类函数是在类的申明中使用关键字Class的函数,它的操作对象是类在堆中VMT中的相关数据,所以只可以使用类名称来调用类函数,而不能使用对象(指针)来调用,举个简单的例子:在VCL源码中的TObject类的申明部分,就有很多类函数,如下
    ....
      class function ClassName: ShortString;
      class function ClassNameIs(const Name: string): Boolean;
      class function ClassParent: TClass;
      class function ClassInfo: Pointer;
      class function InstanceSize: Longint;
      class function InheritsFrom(AClass: TClass): Boolean;
      class function MethodAddress(const Name: ShortString): Pointer;
      class function MethodName(Address: Pointer): ShortString;
    ....
    可以看到,这些函数的操作对象都不是某一个具体的类的实例,而是类自身的相关信息,而这些信息一般来说都是直接保存在类的VMT中,因此,也只能通过类名称来进行调用!
      

  2.   

    HSBD!搂住所说类函数准确的叫做类方法。类方法不仅可以被类调用,如:
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      ShowMessage(TForm1.ClassName);
    end;
    也可以被类实例(即对象)调用:
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      ShowMessage(Form1.ClassName);
    end;————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————
      

  3.   

    多谢楼上的更正,的确是HSBD!是可以通过对象实例来调用!