为什么在一种情况下需要静态数据,而在另一种情况下却不是静态数据呢?

时间:2019-08-25 06:22:24

标签: delphi pascal freepascal

FreePascal,Delphi模式。经过一些实验,我发现该代码已编译,FPC告诉我类过程必须是“静态的”。但是我的问题是:那为什么运算符Equal不需要“静态”并且可以正常编译?我也无法理解“类”过程和“类”与“静态”有什么区别(例如,在classmethod中的Python中,您会获得参数-在staticmethod中引用该类) -您没有这样的说法。

  type TPos = record
    FLine: Word;
    FPos: Word;

    class procedure Init(out a: TPos); static;
    class operator Equal(a, b: TPos): Boolean;
  end;

PS。我设置“ delphi”标签的原因是:1)它是在delphi模式下编写的; 2)因为我找到了与Delphi相同的文档:关于类和静态关键字。

1 个答案:

答案 0 :(得分:6)

与您声明的相反,非静态类方法确实引用了作为参数传递的类。这是一个名为Self的隐式参数。

对于与类相对的记录上的类方法,由于没有继承,因此此Self参数没有任何作用,因此永远不会传递。因此,记录上的所有类方法都必须是静态的。

类运算符隐式是静态方法,因此您无需声明。换句话说,operator意味着static