在Delphi中有不有像JAVA中的静态函数? ( 积分: 30 )

  • 主题发起人 主题发起人 crosser
  • 开始时间 开始时间
C

crosser

Unregistered / Unconfirmed
GUEST, unregistred user!
在Delphi中有不有像JAVA中的静态函数?
也就是说
多个同一类的实体共享类中的一个函数。像JAVA中的静态函数。
 
在Delphi中有不有像JAVA中的静态函数?
也就是说
多个同一类的实体共享类中的一个函数。像JAVA中的静态函数。
 
有class function
但是沒有 static變量
 
delphi中按绑定机制分为:静态,虚,动态,虚抽象方法。
Delphi中方法的分类分为:普通,析构,类方法,消息处理。
delphi中的静态方法是默认类型.
 

引用楼上:
delphi中的静态方法是默认类型.
 
是否指的是用类名可以直接调用的函数?
是的话,在Delphi称为类函数声明时函数名前加Class
 
在Delphi中有不有像JAVA中的静态函数?
也就是说
多个同一类的实体共享类中的一个函数。像JAVA中的静态函数。

未加修饰的类中的任何函数就是静态函数
 
Class Function啊,不用create就可使用
 
vcl.net 中DELPHI已经实现了静态变量
 
不好意思,最近很少上网
 
你做一个全局单元,都引用他不就可以了
 
Delphi(非.net版)只提供了函数的静态调用方法,就是用
class 来声明函数。
静态变量没有提供,确实不方便。
 
静态变量其实也是可以实现的。。。可以通过使用单元局部变量来实现。
如下代码,实现一个可以对类别对象计数的类。同时使用到了class function来访问类对象的个数。使用单元变量来实现计数---类似C++/Java中的静态变量。

//=========================================
// StaticVarTestU - 定义了可以计数的类,通过类方法即可访问此类的对象数
//=========================================
unit StaticVarTestU;

interface

type
TStaticVarClass = class
public
//constructor
constructor Create();
destructor Destroy
override;

//类方法,取得对象的计数
class function ObjectCount: integer;
protected
private

end;

implementation

Var
LObjCount: integer;


{ TStaticVarClass }

constructor TStaticVarClass.Create;
begin
inc(LObjCount)
//使用局部变量
end;

destructor TStaticVarClass.Destroy;
begin
dec(LObjCount)
//使用局部变量

inherited;
end;

class function TStaticVarClass.ObjectCount: integer;
begin
Result := LObjCount
//返回局部变量
end;

initialization
LObjCount := 0
//初始化

finalization
LObjCount := 0;

end.

//=========================================
// StaticTest - 测试代码,创建10个对象,并访问其计数,再Free掉.
//=========================================
program StaticTest;

{$APPTYPE CONSOLE}

uses
SysUtils,
Classes,
StaticVarTestU in 'StaticVarTestU.pas';

procedure printObjCount;
begin
WriteLn(Format('The Object Count now is %d', [TStaticVarClass.ObjectCount]));
end;

var
i: integer;
mObjList: TList;
begin
{ TODO -oUser -cConsole Main : Insert code here }

mObjList := TList.Create;

printObjCount;

for i := 0 to 10 do
begin
mObjList.Add(TStaticVarClass.Create());

printObjCount;
end;

for i := 0 to mObjList.Count -1 do
begin
TStaticVarClass(mObjList.Items).Free;

printObjCount;
end;

mObjList.Free;

readln;
end.

请大家指正....应该可以实现C++/Java中的相同功能.
 
多人接受答案了。
 
后退
顶部