Delphi中的静态类(Win32)

时间:2009-09-29 17:54:34

标签: delphi oop

Delphi(Win32)中是否可以将整个类(不仅是类的函数)声明为静态?

8 个答案:

答案 0 :(得分:8)

看起来用户搜索“类功能”:

type
TSomeClass = class
class procedure MyFunction(...);

这就像静态方法,因此,请将其命名为:

TSomeClass.MyFunction(...);

答案 1 :(得分:6)

我认为你的意思是静态类,比如.net(而不是传统的Delphi / Native中的“静态”) - 答案是否定的。

答案 2 :(得分:6)

我会使用一个抽象类(不要与类中的抽象方法混淆)来阻止它被实例化而不是将构造函数降级为protected:

TMyClass = class abstract
public
  class procedure DoStuff; static;
end;

这将强制执行单例模式并阻止任何实例化时段。

答案 3 :(得分:4)

我不太确定你的“静态类”是什么意思。您可以声明一个只有类方法的类,因此可以在不实例化类的情况下调用这些方法。

TSomeClass.SomeMethod;

这就是你想要的吗?

答案 4 :(得分:2)

不是原生的。

根据您的需要,如果出于代码的目的,在某些用例中,您可以使用 Singleton Pattern对象替换它。

关于实现这一点的演练,我建议使用this guide,几乎涵盖任何版本的delphi,但是如果你使用Delphi 2010,你也可以使用新的class Constructors/Destructors来改善结果。< / p>

答案 5 :(得分:2)

您可以创建一个只包含静态方法的类。如果必须维护某种状态,则状态变量应作为var参数传递。除了在类OUTSIDE的实现部分中具有一组全局变量之外,没有办法“正确”访问静态变量,例如:

UNIT TestUnit;

INTERFACE

Type
  TStaticClass = Class
  public
    procedure Foo(var Bar:String); static;
  end;

IMPLEMENTATION

var
  LastBar : String; // the last bar
  LastRes : string; // the last result

Procedure TStaticClass.Foo(var Bar:String);
begin
  if Bar <> LastBar then
    LastRes := SomeCPUExpensiveProcess(Bar);
  LastBar := Bar;
  Bar := LastRes;
end;

INITIALIZATION
  LastBar := '';
  LastRes := SomeCPUExpensiveProcess('');
END.

答案 6 :(得分:1)

您还可以创建一个名为uDG_Utils的新单元,例如,定义一个类,为该类定义一个全局变量,在初始化和完成部分中,您可以管理类构造函数和析构函数。 现在您需要做的就是调用它像mySuperDuperClass.SuperMethod ...

答案 7 :(得分:-1)


EDIT 我已编辑此帖以删除它。答案肯定是坏的,值得投票。我不希望它留在这里混淆或误导任何人。