Хм, интересно. Я вообще попробовал изначально вернуть TStringList результатом функции. Но у меня что то не пошло. Гугл дал ответ, мол передавайте в параметре ссылку на СтрингЛист, а не возвращайте его результатом.
Тут вот какой вопрос, ну сделаем мы так:
Код:
// А вот тут создаем КОПИЮ и ее возвращаем
function TMyClass.GetItemsAsList : TSringList;
begin
Result := TStringList.Create;
Result.Assign(FItems);
end;
А где же мы тогда будем убивать этот TStringList?
Я этот эксперимент специально затеял, чтобы проверить, как передаются значения, по ссылке или по значению? Потому что этого то я и боялся:
Цитата:
2. Та же ситуация, но в обратную сторону, ты взял ссылку на список в нескольких местах. Теперь если ты меняешь содержимое списка в одном месте, то оно меняеться во всех местах. Это тоже дает неожиданные сторонние эффекты.
|
Но! К моему удивлению, выяснилось, что функция
Код:
procedure TBVN.getBVInfo(sll: TStrings);
begin
if assigned(BVInfo) then sll.Assign(BVInfo);
end;
Именно
копирует содержимое внутреннего поля класса, во внутренний StringList, который был создан размещением на форме Memo.
И, так как в Delphi 7 это было не совсем так, меня это несколько удивило...