最近一致有个疑问,类名(实例).方法 和实例.方法 的在那里,
比如
var
  edit1:Tedit;
  Tedit(edit1).text:='aaa';

  edit1.text:='aaa'
有何区别,我在很多地方都遇到如此用法,就是不解.....

解决方案 »

  1.   

    类方法前面加
    class

    type
      TmyClass=class(tobject)
      public 
      class procedure helloa;
      procedure hellob;
    end;
    ....可以使用
    Tmyclass.Helloa;
    hellob不能这么使,需要实例化后再用
    myclass:=tmyclass.Create;
    myclass.hellob;
      

  2.   

    晕,你那是类型强制转换,
    TEdit(edit1)是将edit1强制转换为TEdit
    不要和类方法和实例混为一谈
      

  3.   

    也知道这个是强类型转换,有点类似于as 的用法,就是不清楚Tedit(edit1) 是否为Tedit类型的指针.....
      

  4.   


    if edit1 is TEdit then
      Tedit(edit1).text:='aaa';
      

  5.   

    建议你去看下inside in vcl.
    强制类型转换会存在的一定的风险性.而类型转换只是更改了对象的执行框架.当改变后的类的执行框架和原类一样或小的时候,运行不会出错,反之会有内存错误.
    类方法(Class Procedure)是可以在没有创建类实例的情况下调用这个方法,
    有点类似java的静态方法,和c++的友元.