我在一个非常昂贵的课程中有一定的操作。 (完全运行大约8秒)所以,现在我已经决定它可能应该在“初始化”屏幕的程序开始时运行。我在Delphi的任何地方都找不到表明存在静态字段的东西。
我基本上需要做的是加载一个记录列表,并在程序的整个生命周期中保持它们的存活。在Delphi中执行此操作的最佳方法是什么?
我会很简单地在C#中这样做:
class Foo{
static List<...> Bar;
}
然而在Delphi中,我没有看到任何用于创建静态字段的内容。我所看到的是用于创建静态方法的class
关键字
答案 0 :(得分:5)
您可以使用全局变量。将其添加到单元的implementation
部分,使其成为该单元的本地部分。
我的Turbo Delphi支持class var x:integer;
,但我很确定Delphi 7不支持。{/ p>
答案 1 :(得分:4)
我认为现在是在Delphi中使用initialization
和finalization
的好时机。这是在单元的末尾,就在end.
之前。您可以使用它来创建/释放这样的全局实例,或者只设置默认变量...
unit Unit1;
interface
uses
Classes;
function MyList: TStringList;
implementation
var
GMyList: TStringList;
function MyList: TStringList;
begin
Result:= GMyList;
end;
initialization
GMyList:= TStringList.Create;
MyList.Append('Value 1');
MyList.Append('Value 2');
MyList.Append('Value 3');
finalization
GMyList.Free;
end.
这只需要像这样的特殊场景。 MyList
将在申请期间继续存在。
请注意GMyList
下implementation
的声明MyList
,GMyList
实际上是访问GMyList
的全局函数。这是为了避免意外分配等。在任何其他单元中,您可以使用MyList
功能访问GMyList
,但无法直接访问{{1}}(这是您希望避免的错误)。
答案 2 :(得分:3)
如果你想要真实的东西,你需要一个更新的Delphi版本。
然而,帕斯卡总是有类似的范围,但为此你应该(有点幻想)将一个单位视为静态决赛阶段。
公共的函数和变量在接口部分中定义,私有部分在实现部分中定义。 所有这些或多或少都等同于类变量和类方法。
如果你命名你的单元loader.pas,并在接口部分定义一个函数“init”,你甚至可以把它称为类函数:loader.init()。
初始化和终结部分相当于类构造函数和类析构函数。
我上面描述的内容从turbo plascal到delphi 2007(我认为类变量在d2009中引入)是有意义的。总而言之,我建议只是换一个新的delphi。