在操作一個函式時,需要回傳抽象類TStringS。得到的值為空

private
{ Private declarations }
Function getList:TStringS;
- - - - - -
Function TForm1.getList:TStringS;
var
aa: TStringList;
i: integer;
str: string;
begin
aa := TStringList.Create;
aa.Add('abc'); aa.Add('def'); aa.Add('ghi');
Result:=aa;
FreeAndNil(aa); ---》這里釋放物件,回傳為空,如果不釋放,為正確的。難道呼叫這個物件外面釋放嗎?
end;
procedure TForm1.Button1Click(Sender: TObject);
var
ts: TStringList;
begin
ts := TStringList.Create;
ts.Assign(getList);
ShowMessage(ts.Text); ---》這里為空
FreeAndNil(ts);
end;
uj5u.com熱心網友回復:
aa := TStringList.Create; 創建后,對像其實是存在的,只是沒有List內容aa.Add('abc'); aa.Add('def'); aa.Add('ghi'); 這里確實是為List增加了內容,
Result:=aa; 這里是說需要讓函式回傳aa,但并不是說這里就直接回傳
FreeAndNil(aa); 這里你釋放了對像,整個對像為空的了。
后面函式回傳出來的aa就是空的。
所以,當你getList后,你只能得到一個nil
解決辦法,可以使用全域變數。
uj5u.com熱心網友回復:
你應該將Strings的物件傳過去,而不是將Strings的物件回傳一般情況下,建議使用TStringList,不建議使用TStrings
private
{ Private declarations }
procedure getList(theList:TStrings);
- - - - - -
procedure TForm1.getList(theList:TStringS);
var
i: integer;
str: string;
begin
theList.Add('abc');
theList.Add('def');
theList.Add('ghi');
end;
procedure TForm1.Button1Click(Sender: TObject);
var
ts: TStringList;
begin
ts := TStringList.Create;
getList(ts);
ShowMessage(ts.Text); ---》這里為空
FreeAndNil(ts);
end;
uj5u.com熱心網友回復:
Result和aa都是指向同一個StringList的指標,aa指向的StringList釋放了,Result指向的StringList當然也已經釋放了。
uj5u.com熱心網友回復:
Result:=aa;是指標賦值,不是物件賦值。解決方法:
Result := TStringList.Create;
Result.Assign(aa); //或Result.Text := aa.Text;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/283597.html
標籤:數據庫相關
上一篇:delphi idhttp.post 走的不是HTTP協議?
下一篇:Java語言發展史