TPerson = class(TObject)
public
ID: Integer;
Name: string;
Sex: boolean; //True为男,FALSE为女, 空值为不限
...
end;在程序中创建对象并赋值使用后,想清空ID字段的值和Sex字段的值,用:
aPerson.ID := null;
和
aPerson.Sex := NULL;
编译可通过,但是执行到此时老出错.
public
ID: Integer;
Name: string;
Sex: boolean; //True为男,FALSE为女, 空值为不限
...
end;在程序中创建对象并赋值使用后,想清空ID字段的值和Sex字段的值,用:
aPerson.ID := null;
和
aPerson.Sex := NULL;
编译可通过,但是执行到此时老出错.
解决方案 »
- 通过代理上网时,调用webservice不成功
- 新手问个关于会员卡、刷卡器开发的问题
- 北京工作,这样待遇如何
- 想找几个DELPHI开发者的blog阿,谁推荐一下?
- 关于POS机上的嵌入式系统移植道通用PC上的实现.
- 紧急求助:strtodate转换后的格式以及日期之间的运算问题。
- 我想固定字符串格式,如长度为10,我把'hyd'传给这个变量后会在后补足空格,我应该声明什么类型的变量
- 开发ERP的程序员请问?
- 如何表示字段值为空?
- delphi的帮助应该怎么阅读?我怎么找不到头绪,另外sdk什么意思??
- D2007编译的软件,到新环境提示错误:Unable to load DLL 'dbxmss30.dll'
- 二次开发平台
aPerson.CleanupInstance;
似乎没有用呀!
var
a :Tperson;
begin
a := Tperson.Create; //先创建
try
a.ID := 1;
a.Name := 'OK';
a.Sex := true;
ShowMessage(a.Name);
finally
a.Free; //再释放
end;
ShowMessage(a.Name);
1. 如何清除 对象a 里面ID和Sex字段的值, 想把它们赋空.
2. 有没办法一次性清除对象a里面所有成员的值? 还是要一个个赋空?
integer 的空值是否就一定是0,
Boolean 的空值是否就一定是False, //Booltostr()显示是0
那:
integer 型的成员是否有办法赋个像数据表中未填入数据时的空? 既非0也非其它数字?
在delphi中,class在构建的时候内容全是0,并把最开头的4字节指向Object.ClassType
在d2009中,新增了default(T)的语法取得一个类似的默认为0的值
查了,感觉像是 aPerson.CleanupInstance; 但是似乎没用呀! 有没别的方法?
所以可以用这种方法来清零:procedure CleanInstance(AObject: TObject);
begin
AObject.CleanupInstance;
FillChar((PAnsiChar(AObject)+4)^, AObject.InstanceSize - 4, 0);
end;但是这样的话,如果内部还有其它对象,需要通过destructor才能释放的,就直接把内部指向对象的指针清0了,会导致memory leak。所以建议还是不要用这种方式来清0,除非你真的明确的知道自己在做什么
需要自己写clear方法
TFoo=class
...
FList:TStrings
...
end;procedure TFoo.blahblah;
begin
FList:=TStringList.Create;
...
end;destructor TFoo.Destroy;
begin
FList.Free;
...
end;
那你就不能随便清除了
object的内部可能有许多实现的方式,就算是统一查TypeInfo()表,按是不是TObject释放(我还没仔细研究过TypInfo单元,不知道能不能实现),也不一定能保险
接分!