//我定义一个类如下:
type
  TMyClass = class
  private
  public
    procedure Test;
  end;
//实现代码如下
procedure TMyClass.Test;
begin
  ShowMessage('hello');
end;
//我在窗体上放个button1,双击button1代码如下:
procedure TMainForm.Button1Click(Sender: TObject);
var
  oMyClass: TMyClass;
begin
  // oMyClass:= TMyClass.Create; 
  oMyClass.Test; //????问题:我在注释掉上面一行时(Create代码)为什么这一行也能成功呢。
                 //不是对像只有实例化后才可以用吗??难道不创建对像可以直接引用对像方法??
  //FreeAndNil(oMyClass)
end;

解决方案 »

  1.   

    你在类里面定义一个变量,然后在TEST方法里给其赋值,试试看
      

  2.   

    procedure Test;這裡它把Test當作共用過程或類方法
      

  3.   

    共用过程是个什么概念,不用实例化对像就可以用?如何这样,这个test函数在地址里分配空间了没,
    类似于一个公用函数了?
      

  4.   

    刘艺的delphi面向对象编程思想那本书里介绍的比较详细。
      

  5.   

    静态方法是Delphi的缺省类型.
    也就是说,在编译期,编译器就已经知道了这个方法的地址。所以类不用实例化也可以调用。
    如果在方法后加上virtual就必须在运行期通过地址计算才能算出该方法的地址。
      

  6.   

    本帖最后由 liangpei2008 于 2011-03-30 15:44:25 编辑
      

  7.   

    因为你的test方法是静态的,而且没有用到对象的成员变量。
      

  8.   


    建议不要这么用!
      不容易理解,如果在方法里面加变量之类的东西,就会有问题!因此如果做为类方法使用,最好明确定义为类方法 比如前面加class可以理解为没有实例化的对象,对方除了定义为类方法的方法,不能调用调用类方法,可以使用 类名.类方法!