我有记录类型:如何初始化VAR Record参数
type
TIPInfo = record
IP,
HostName,
City,
Region,
Country,
Loc,
Org: WideString
end;
函数返回的记录数据:
function GetPublicIPInfo(var IPInfo: TIPInfo): Boolean;
begin
// initialize
FillChar(IPInfo, SizeOf(TIPInfo), 0);
// populate data
IPInfo.IP := GetVallue('ip');
IPInfo.HostName := GetVallue('hostname');
IPInfo.City := GetVallue('city');
// etc...
Result := IsOk;
end;
来电者:
var
IPInfo: TIPInfo;
if GetPublicIPInfo(IPInfo) then... // use data
它是正确的通过调用FillChar
来初始化var TIPInfo
的方法,还是应该将每个字段设置为空字符串?呼叫者应该这样做吗?
另外,在这种情况下使用out
参数会更好吗(因为函数没有读取数据)?
我会用out参数时,函数不读取参数。此外,在这种情况下,很明显函数本身应该初始化它而不是调用者。 FillChar没有在每种情况下正确初始化字符串等托管类型(尽管它在您的情况下),所以我只是分别初始化每个字段。 –
在这种情况下,所有记录字段都是'WideString',它由编译器自动初始化,所以函数根本不需要初始化任何东西。这就是说,我同意R.Beiboer,使用'out'而不是'var'是最好的选择。 –
@RemyLebeau成员可以使用该对象以前使用的任意值。所以他们确实需要分配。 –