如何判断一个变量是否赋值?(10分)

  • 主题发起人 主题发起人 dazzling
  • 开始时间 开始时间
D

dazzling

Unregistered / Unconfirmed
GUEST, unregistred user!
比如在类中声明了一个变量
i:integer

我想在方法中先判断其有否被用户赋值,如何判断?
 
可以啊,你看看以前的帖子,有这方面的问题
 
没人知道吗?
 
ADODataSet是被Borland封装后的Recordset,对于原生Recordset的许多特性都没有了(分页就是其中之一),可以利用ADODataSet.Recordset属性来实现。或者直接自己创建原生Recordset来实现。更多信息可以参见ADO程序员参考。
 
用不着这样吧,竟然换了个问题?
 
showmessage(i)
 
TX = class
privte
FI : integer;
FIsIAssigned : boolean;
procedure SetI(const Value : integer);
public
property I : integer read FI write SetI;
constructor Create;
end;

---------------
procedure TX.Create;
begin
FIsIAssigned := false;
end;

procedure TX.SetI(const Value : integer);
begin
FI := Value;
FIsIAssigned := true;
end;

在其他方法中通过FIsIAssigned的值来判断I是否已赋值
 
kidneyball的方法可行

直接判断则无法判断
原因是在Delphi中定义Integer类型为简单类型,若为全局变量则直接在数据段中分配内存并初始化为0,若局部变量则在堆中分配内存,初始值为随机数
因为Integer是使用4个字节的内存直接保存值,并不保存指针,也没有使用其他的技术(比如长字符串就使用4个字节保存引用次数,使用4个字节保存长度)保存额外信息,所以直接判断没有依据

建议使用kidneyball的方法
 
有趣的问题,kidneyball的方法不错。
类中的变量在类创建时会自动清零。
可以用标志值来判断变量是否被赋值,如kidneyball的方法,或者初始化为特殊值(用户不能设置的值),通过判断是否为特殊值来判断是否被赋值。
 
对于指针变量或是对象引用,可以使用Assigned()方法来判断是否已赋值,对于简单类型变量,可以参考Kidneyball的方法。
 
多人接受答案了。
 
后退
顶部