Delphi 中类似C中的静态成员如何实现? ( 积分: 50 )

  • 主题发起人 主题发起人 xingyanwei
  • 开始时间 开始时间
X

xingyanwei

Unregistered / Unconfirmed
GUEST, unregistred user!
在C中,我在类定义中可以使用
static int a;
在Delphi中没有static,请教该怎么解决?

附加问题:
在Delphi中可以使用类函数,但是在实现中缺不能像正常的函数一样调用类成员。
例如:
type
TForm1 = class(TForm)
private
{ Private declarations }
count : integer;
public
{ Public declarations }
class function a : integer;
end;

//下面这样写就错误了,为什么?怎么解决?
class function TForm1.a: integer;
begin
result := count;
end;
 
在C中,我在类定义中可以使用
static int a;
在Delphi中没有static,请教该怎么解决?

附加问题:
在Delphi中可以使用类函数,但是在实现中缺不能像正常的函数一样调用类成员。
例如:
type
TForm1 = class(TForm)
private
{ Private declarations }
count : integer;
public
{ Public declarations }
class function a : integer;
end;

//下面这样写就错误了,为什么?怎么解决?
class function TForm1.a: integer;
begin
result := count;
end;
 
class function中不能存取任何类实例中的成员,例如count。
要实现类似c++的静态变量,可以在implementation中定义全局量
 
我知道用全局变量可以,但是这样封装性不好,偏离了类定义的本质.
 
写到implementation中,别的单元一样不能直接存取阿,
 
Delphi不支持,否则delphi真的就无敌了,呵呵
 
class function是类的方法,而不是对象的方法,类似构造函数,你可以看一下Delphi的帮助
 
因为类方法不能访问数据成员,也就是说它根据没有通过构造函数实例化,来初始化数据成员,它怎么能访问数据成员吧。

对于这种抽象类,一般用作你不知道其对象何在,用它作为基类.

个人理解的。。。
 
问题的关键在于:如果我想在类A里面用一个CurrentObjectCount(int)来记录类A的实例个数,该怎么办?
 
自己up一下 :)
(不是灌水啊!)
 
procedure Proc_ID;
{$WRITEABLECONST ON}
const
P_ID: Integer = 0;
begin
Inc(P_ID,1);
end;
 
静态的目的就是能够保留值,只有用全局变量,放在全局区声明
type
TForm1 = class(TForm)
private
{ Private declarations }
count : integer;
public
{ Public declarations }
class function a : integer;
end;

//下面这样写就错误了,为什么?怎么解决?
class function TForm1.a: integer;
begin
result := count;
end;

可以自定义类函数或变量,也可是公有的

type OwnClass=class
public
a:integer;
function Method(n:Integer):String;
end;


 
//下面这样写就错误了,为什么?怎么解决?
class function TForm1.a: integer;
begin
result := count;
end;

这样当然不可以啦。

也不知道你这样用是什么意义, 把count声明 在 impletion 下面 是最好的方法。
 
完全对应c++的静态成员变量是没有的,但可以用可修改常量加上class方法(对应c++的static方法)来达到,麻烦了一点,看不出什么必要.
 
谢谢大家的帮助,上面大家提供的解决方法我都知道,就是觉得像C中那样的解决方法最理想.看来在Delphi无法实现,只好变通了.
我是这么解决的:
目的:用一个数记录类A的实例个数.
方法:创建一个类B包裹类A,在类B中记录个数,虽然不如在类A中记录科学,但是也稍微好一些.
 
后退
顶部