![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как правильнее организовать доступ к списку из 2-х процедур
Scott Storch © (2011-09-19 12:54:00)Есть метод ProcA, который внутри себя имеет процедуру ProcB. Из обоих процедур нужно рабоать с одним списком List. Как правильнее организовать доступ к списку из обоих процедур.
1-вариант:
procedure TForm1.ProcA;
procedure ProcB(List: TStrings);
begin
end;
var
List: TStrings;
begin
List := TStringList.Create;
try
ProcB(List);
finally
FreeAndNil(List);
end;
end;
2-й вариант
procedure TForm1.ProcA;
var
List: TStrings;
procedure ProcB;
begin
end;
begin
List := TStringList.Create;
try
ProcB;
finally
FreeAndNil(List);
end;
end;
RWolf (2011-09-19 14:59:00) [1]
> Scott Storch (19.09.11 12:54)
вариант 1 обычно нагляднее, т.к. явно описано, что ProcB использует указанный аргумент, а не контекст охватывающей процедуры. Кроме того, можно её при необходимости безболезненно вынести уровнем выше без переделок в коде.
Ega23 (2011-09-19 13:31:00) [2]
> 1-вариант:
> 2-й вариант
3-й вариант:
type
TForm1 = class (TForm)
.....
private
procedure ProcB(Strings: TStrings);
......
public
.....
procedure ProcA;
.....
end;
stas (2011-09-19 13:05:00) [3]1-й вариант имеет смысл если будешь делать так :
procedure TForm1.ProcA;
procedure ProcB(List: TStrings);
begin
end;
var
List1: TStrings;
List2: TStrings;
begin
List1 := TStringList.Create;
List2 := TStringList.Create;
try
ProcB(List1);
ProcB(List2);
finally
FreeAndNil(List1);
FreeAndNil(List2);
end;
end;
Медвежонок Пятачок (2011-09-19 13:03:00) [4]Из обоих процедур нужно рабоать с одним списком List.
Да хоть из миллиона процедур.
Какая разница-то?
stas (2011-09-19 12:59:00) [5]В данном случае во втором варианте, сохранишь 4 байта ОЗУ.
А так без разницы.