|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
14.02.2008, 19:42 | #1 |
Форумчанин Подтвердите свой е-майл
Регистрация: 20.11.2007
Сообщений: 500
|
Проблема с TStrings
Код:
|
14.02.2008, 19:45 | #2 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
TStrings - Это помойму абстрактный класс. надо:
Код:
|
14.02.2008, 20:19 | #3 |
Участник клуба
Регистрация: 30.04.2007
Сообщений: 1,307
|
Люди не мучайтесь, когда-то и я мучался, но мне дали хороший совет и я Вам его передаю.
Код:
Тип похож на TStrings (тот что у Memo.TStrings).
Всё гениальное - просто!
|
14.02.2008, 20:47 | #4 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
вапще-то суть, что я написал, что ты - одна и та же. TStringList - наследник от TStrings, так что можно описать переменную как TStrings, а уже при создании объекта указывать нужный тип. Тип не похожь на тип Memo, а это тот же самый тип. Это то же самое, что кто-то запомнит собаку как млекопитающее, а кто-то как животное. собака от этого не изменица.
|
15.02.2008, 15:53 | #5 | |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
Цитата:
В приведенном примере еще ладно, но как думаете, в исходниках VCL почему в методах для объявления параметров используются абстрактные классы ? |
|
15.02.2008, 17:10 | #6 | |
Участник клуба
Регистрация: 30.04.2007
Сообщений: 1,307
|
Цитата:
P.S. а почему тогда ощибку так же пометили "Strings.Add('123'); // сдесь ошибка Abstract Error"?
Всё гениальное - просто!
|
|
15.02.2008, 17:15 | #7 |
Участник клуба
Регистрация: 30.04.2007
Сообщений: 1,307
|
М-м...ДА, а Вы глянь те на 1 сообщение, то что от "Никки", там ни каким боком и не сказано про VCL.
Всё гениальное - просто!
|
16.02.2008, 15:12 | #8 | |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
Цитата:
Объявлять переменные можно и нужно абстрактного класса. А вот создавать объекты нужно используя только конкретный класс. Советовать использовать всегда только конкретные классы - это ошибка, хотя это безусловно работает. Но это как-раз та самая ошибка проектирования, которая нам так дорого обходится в дальнейшем. Приведу пример. Тот-же VCL (исходный код которого всегда полезно смотреть). Многие классы имеют методы записи/чтения в файл. Эти методы использованы с использованием абстрактного класса TStream. Ведь если бы использовались конкретные классы (TFileStream или TMemoryStream) методов было бы больше - для каждого конкретного класса. То есть Ваш пример отличен и, надеюсь, у Никки все получилось, но, не в обиду будет сказано, Вашему совету "использовать всегда тип TStringList, потому что меньше проблем" следовать не нужно. |
|
16.02.2008, 16:34 | #9 | |
Участник клуба
Регистрация: 30.04.2007
Сообщений: 1,307
|
Цитата:
К примеру: Код:
<Цитата> Приведу пример. Тот-же VCL (исходный код которого всегда полезно смотреть). Многие классы имеют методы записи/чтения в файл. Эти методы использованы с использованием абстрактного класса TStream. Ведь если бы использовались конкретные классы (TFileStream или TMemoryStream) методов было бы больше - для каждого конкретного класса. <Конец цитаты> Из этого я понял, что можно обьявить один тип TStream, а не описывать каждый, с отдельной переменной. К примеру: Код:
Всё гениальное - просто!
|
|
16.02.2008, 20:21 | #10 | |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Цитата:
ЗЫ. прост убить забыл камент |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
как правильно работать с массивом TStrings | Air | Общие вопросы Delphi | 6 | 19.12.2007 17:55 |
проблема с *.chm | FAiver | Свободное общение | 5 | 28.09.2007 21:01 |
Функции и TStrings | tebeen | Паскаль, Turbo Pascal, PascalABC.NET | 7 | 18.09.2007 20:09 |