Форум: "Основная";
Текущий архив: 2003.01.23;
Скачать: [xml.tar.bz2];
ВнизПочему не работает? Найти похожие ветки
← →
Noname2 (2003-01-14 19:10) [0]var
q: Tstrings;
begin
q.add("qqqqqqq");
end;
какието ощибки...
подскажите как сделать переменную типа Tstrings и заполнять ее
← →
Skier (2003-01-14 19:12) [1]>Noname2
> какието ощибки...
Куча !
var
q: Tstrings;
begin
q := TStringList.Create;
try
q.add("qqqqqqq");
finally
FreeAndNil(q)
end; //try
end;
← →
UltraFreak (2003-01-14 19:14) [2]Не уверен, но попробуй:
var
q:tstrings;
begin
q:=tstrings.create;
q.add("aaa");
q.add("bbb");
q.add("ccc");
q.free;
end;
Или что-то в этом роде...
← →
Skier (2003-01-14 19:15) [3]>UltraFreak
Похоже на шутку...:)
← →
Noname2 (2003-01-14 19:25) [4]> Skier ©
а можно как-то сделать, чтобы переменная Tstrings надолго хранила информацию, а не только в блоке try...finally ?
Она мне надо как глобальная
← →
R4D][ (2003-01-14 19:31) [5]Дело в том, что TStrings - абстрактный класс, а одна из его реализаций - это TStringList(это я пояснил код Skier"a), смею предположить, что для NoName2 - он несколько непонятен. Вопрос к Skier"у: Зачем объявлять переменную типа TStrings и добавлять лишний FreeAndNil и try...finally, если можно сразу объявить TStringList? Так что можно по-легче.
← →
Skier (2003-01-14 19:33) [6]>Noname2
Можно.
Сделай переменную типа Tstrings полем формы...
TForm1 = class(TForm)
private
FStrings : TStrings;
//..................
end; //
//.................
procedure TForm1.FormCreate(Sender: TObject);
begin
FStrings := TStringList.Create;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FreeAndNil(FStrings); //или просто FStrings.Free;
end;
Если тебе нужно чтобы поле FStrings было видно и
в других модулях, то перенеси его в раздел public
TForm1 = class(TForm)
public
FStrings : TStrings;
//..................
end;
(конечно, F - это обычно префикс private-поля, но это
уже не принципиально...)
← →
mrcat (2003-01-14 19:36) [7]Noname2 (14.01.03 19:10)
...
какието ощибки...
...
TStringList
F1 -> Example
← →
Noname2 (2003-01-14 19:38) [8]Всем большое спасибо
← →
Skier (2003-01-14 19:38) [9]>R4D][
1) Освобождение объекта никогда не бывает лишним !
(тем более что у него нет владельца)
2) когда идёт работа с памятью то её освобождение
надо защищать на случай возникновения исключения
(конечно в этом куске кода оно вряд ли возникнет :), но
использование блока try-finally-end в случаях выделения
памяти должно войти в кровь...:) )
← →
R4D][ (2003-01-14 19:45) [10]Не хочу показаться необязательным, но здесь это не критично, да и, все же, объявить TStringList вместо TStrings, более рационально, но, вообще, ты несомненно прав.
← →
Roma (2003-01-14 19:46) [11]> Skier © (14.01.03 19:33)
F - это обычно префикс private-поля, но это уже не принципиально...
Не обязательно private, просто - поля (от англ. field - поле), для отличия полей от свойств (у которых в Delphi не принято ставить префикс). Но это уже совсем не принципиально... ;)
PS: Это сообщение не для Скайера, а просто комментарий...
← →
Anatoly Podgoretsky (2003-01-14 20:31) [12]R4D][ (14.01.03 19:45)
Нет_ не рационально, не забываем про полиморфизм и не ограничиваем себя только TStringsList, а вот это - FreeAndNil(q), как правило это говорит о плохом проектировании программы и желании повторного использования, что как правило кончается плохо, поиском трудно уловимых ошибок.
← →
Skier (2003-01-15 10:48) [13]>Anatoly Podgoretsky
Это говорит о правиле сбрасывания указателя, на освобождённый
объект, что не является криминалом...
← →
R4D][ (2003-01-15 18:01) [14]>Anatoly Podgoretsky
А зачем здесь нужны другие наследники TStrings? Насколько я понял, другие классы, кроме TStringList, здесь не понадобятся, в то же время, прямое объявление TStringList делает код более понятным, наглядным для новичка. Да и ошибки потом будет легче искать. Так что все-таки, как мне кажется, сразу объявлять TStringList более рационально в данном случае.
← →
Anatoly Podgoretsky (2003-01-15 18:11) [15]Skier © (15.01.03 10:48)
Криминалом конечно не является, зачем сбрасывать вот в чем вопрос?
R4D][ (15.01.03 18:01)
Тебе про кровь писали?
← →
Skier (2003-01-15 18:28) [16]>Anatoly Podgoretsky
В этом куске кода это безусловно не обязательно,
но иногда (в более сложном коде:) ) возникает необходимость
проверки указателя на nil, чтобы убедиться что или объект ещё
не создан или он уже убит...
← →
Anatoly Podgoretsky (2003-01-15 21:28) [17]Skier © (15.01.03 18:28)
Таким исключение могут быть члены класса, как контейнеры, во всех остальных случаях стоит задуматься об дизайне, за 8 лет работы с Дельфи, ни разу не потребовалось, потому что не не путаюсь повторно использовать, это прямой путь к ошибкам.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.01.23;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.008 c