我正在用类构造函数
创建一个类TStaticDynSettings = class
public
class constructor create;
class destructor destroy;
class procedure Reload;
end;
除了create和destroy之外,类中的所有其他方法都需要是类方法吗?
我确信所有变量都需要是一个类var,否则自动初始化将不起作用。
调用程序有什么不同?..
var StDyn : TStaticDynSettings;`
StDyn.Reload;
和
TStaticDynSettings.Reload;
答案 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;
区别在于Reload1
和Reload2
方法中传递的隐藏参数,而不是Reload3
中传递的。
隐藏参数是对Reload1
中对象实例的引用(并且因为您没有创建对象实例而未使用),以及Reload2
中的类引用(在您的情况下可能也是不必要的,假设在编译时已知类引用。)
第一种形式(Reload1
)具有误导性,因为它假设使用对象引用,因此应该避免(尽管它有效)。
如果您没有使用编译时未知的类引用,则第三种形式(Reload3
)更可取。
2 - 没有区别(如果第一种情况不计算使用不必要的对象变量的开销)。