我有記錄類型:如何初始化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成員可以使用該對象以前使用的任意值。所以他們確實需要分配。 –