Delphi(Win32)中是否可以将整个类(不仅是类的函数)声明为静态?
答案 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 我已编辑此帖以删除它。答案肯定是坏的,值得投票。我不希望它留在这里混淆或误导任何人。