关于在delphi中调用静态类的不同方法

时间:2013-01-02 07:22:59

标签: delphi class constructor

我正在用类构造函数

创建一个类
TStaticDynSettings = class
public
  class constructor create;
  class destructor destroy;
  class procedure Reload;
end;

除了create和destroy之外,类中的所有其他方法都需要是类方法吗?

我确信所有变量都需要是一个类var,否则自动初始化将不起作用。

调用程序有什么不同?..

var StDyn : TStaticDynSettings;`
StDyn.Reload;

TStaticDynSettings.Reload;

1 个答案:

答案 0 :(得分:3)

1 - 如果您不打算创建TStaticDynSettings的对象实例,可以使用以下3种形式中的任何一种:

type
  TStaticDynSettings = class
  public
    procedure Reload1;
    class procedure Reload2;
    class procedure Reload3; static;
  end;

致电示例:

procedure Call1;
var Instance: TStaticDynSettings;

begin
  Instance.Reload1;
end;

procedure Call2;
begin
  TStaticDynSettings.Reload2;
end;

procedure Call3;
begin
  TStaticDynSettings.Reload3;
end;

区别在于Reload1Reload2方法中传递的隐藏参数,而不是Reload3中传递的。

隐藏参数是对Reload1中对象实例的引用(并且因为您没有创建对象实例而未使用),以及Reload2中的类引用(在您的情况下可能也是不必要的,假设在编译时已知类引用。)

第一种形式(Reload1)具有误导性,因为它假设使用对象引用,因此应该避免(尽管它有效)。

如果您没有使用编译时未知的类引用,则第三种形式(Reload3)更可取。

2 - 没有区别(如果第一种情况不计算使用不必要的对象变量的开销)。