在Delphi (Win32)中,是否可以将整个类(而不仅仅是类的函数)声明为静态的?
看起来用户正在搜索“类函数”:
type
TSomeClass = class
class procedure MyFunction(...);
这就像是静态方法,所以调用它:TSomeClass.MyFunction(...);
我建议使用抽象类(不要与类中的抽象方法混淆)来防止它被实例化,而不是将构造函数降级为受保护状态:
TMyClass = class abstract
public
class procedure DoStuff; static;
end;
我想你是指像.net中的静态类(而不是传统Delphi / Native中的“static”) - 答案是否定的。
我不太确定你所说的“静态类”是什么意思。你可以声明一个只有类方法的类,这样就可以在不实例化该类的情况下调用这些方法。
TSomeClass.SomeMethod;
这是您想要的吗?
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.
原生不支持。
根据您需要它的用途,如果是为了您的代码,某些情况下,您可以将其替换为单例模式对象。
如果您需要实现此功能的详细说明,我建议您参考这个指南,该指南涵盖了几乎所有版本的Delphi,但如果您使用的是Delphi 2010,则还可以使用新的类构造函数/析构函数来获得更好的结果。
你也可以创建一个名为uDG_Utils的新单元,定义一个类,为该类定义一个全局变量,并在初始化和终止部分管理类的构造函数和析构函数。 现在你所需要做的就是像这样调用它:mySuperDuperClass.SuperMethod...
编辑 我已经编辑了这篇文章以将其删除。答案承认是糟糕的,值得被踩。我不希望它继续存在于这里,以免进一步混淆或误导任何人。
constructor TObject.Create();
无法“删除”!如果你实现了一个名字不同的构造函数,Create()
仍然可以被调用。如果你实现了一个与默认构造函数同名但可见性较低的构造函数,则在当前构造函数超出作用域时将调用默认构造函数。 - Disillusioned