Показать сообщение отдельно
  #4  
Старый 22.05.2023, 11:17
bubaeshka bubaeshka вне форума
Прохожий
 
Регистрация: 20.02.2016
Сообщения: 13
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Хм, интересно. Я вообще попробовал изначально вернуть 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 это было не совсем так, меня это несколько удивило...
Ответить с цитированием