我觉得
F:=Test;
应该比较合适。
另外声明为of Object应该,实际上是给Class中的Method使用的。

解决方案 »

  1.   

    我对Delphi的指针操作,实在有些胡涂。Test本身就是指针了,@test应该是指向Test的指针,为什么会能一样呢?实在是奇怪。
      

  2.   

    实际上
      F:=TEST
    这一句,Delphi会自己把它转换为
      F:=@TEST
    就这一点而言,Delphi并没有C++严格(也可以说比C++智能:既然F是一个指针,那当然应该取TEST的地址给它啊)。
      

  3.   

    我想这是delphi的妙处,test本身是指针(就象编译后的函数向量表),f:tfun也说明的是指针(但是一个实例的载体),@test还是指针(是编译过程计算出来地址的指针),效果真的一样,实质是不是一样就要看在那个层面上理解和分析了。
      

  4.   

    object pas 是严谨的计算机言语,她的编译器会对赋值语句的两边数据类型进行检查(她可不认为只要类型大小一样就能赋值),上面有朋友说这是“智能”的表现,我觉得有偏见。
    显然
    TFun=Function(X:Integer;Y:Double=2.3):Boolean;

    TFun=Function(X:Integer;Y:Double=2.3):Boolean of Object;
    不是相同的数据类型。就这个问题深入一点讨论:
    TFun=Function(X:Integer;Y:Double=2.3):Boolean; 是一个 32 位指针

    TFun=Function(X:Integer;Y:Double=2.3):Boolean of Object; 实际上是由两个 32 位指针组成,一个是函数指针,一个是 Object 指针。"URW3537"错是一个不正常的错误,原因是 delphi 内部 bug(只有 delphi 开发小组才能解释),当然它不应该经常出现,否则 delphi 就别混了。根据经验这种错误在某种非常规操作下会出现。
      

  5.   

    比较同意qkl(康)的看法,
             在windows.pas中有一申明:TWindowHook
               TWindowHook = function (var Message: TMessage): Boolean of object;          看一看它的用法吧!
              我也不清楚的。