![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TStrings и не понятное исключение
Дядя © (2007-09-09 11:15:00)Добрый день!
Проблема возникла. Мне неоходимо создать экзэмпляр класса TStrings. Использую при этом метод Create. Но при использовании программы, когда приходит время потрудится моему экзэмпляру, появляется исключение. Не пойму в чём дело.
Отрывки кода:
File List: TStrings;
****
FileList:=TStrings.Create;
FileList.LoadFromFile(***);
****
DrPass (2007-09-09 19:40:00) [21]
> Anatoly Podgoretsky © (09.09.07 19:37) [22]
Так TStrings ведь самостоятельно без наследования работать не может
> Ну и что, если у самого законодателя такие ляпы являются
> нормой
Законодатель появится, если язык будет стандартизован. А в данном случае законодательствовать некому
{RASkov} (2007-09-09 19:40:00) [22]> Но любой класс, от которого наследуются является базовым
> для наследуемого.
Тогда они все базовые.... кроме самых "последних" :)
Инс (2007-09-09 19:39:00) [23]
> [21] Вася Правильный (09.09.07 19:37)
Открыл нам глаза :)
> [22] Anatoly Podgoretsky © (09.09.07 19:37)
Каждый останется при своем :)
Anatoly Podgoretsky (2007-09-09 19:38:00) [24]> Вася Правильный (09.09.2007 19:37:21) [21]
О чем и речь и в чем нам отказывают некоторые.
А вот абстрактный класс в принципе создать нельзя, он просто не существует в природе, это всего лишь шаблон.
Anatoly Podgoretsky (2007-09-09 19:37:00) [25]> Инс (09.09.2007 19:34:20) [20]
Не обязан, но тогда это законченый класс и его уже не совсем правомерно так называть, поскольку он может полность работать самостоятельно без наследования.
Но любой класс, от которого наследуются является базовым для наследуемого.
Вася Правильный (2007-09-09 19:37:00) [26]экземпляры таких классов создавать можно, только нельзя вызывать абстрактные методы, которые не реализованы
Инс (2007-09-09 19:34:00) [27]Просто это вопрос терминологии. Базовый класс не обязательно должен содержать абстрактные методы. Как же тогда назвать класс с абстрактными методами? Так уж повелось, что в терминологии Delphi они называются абстрактными. И я по прежнему считаю, что нет в этом никакой ошибки.
Anatoly Podgoretsky (2007-09-09 19:31:00) [28]> Инс (09.09.2007 19:28:17) [17]
А что мне то объяснять, если TeamB все объяснили, а это Люди.
Anatoly Podgoretsky (2007-09-09 19:31:00) [29]> Инс (09.09.2007 19:28:17) [17]
Ну и что, если у самого законодателя такие ляпы являются нормой.
Инс (2007-09-09 19:28:00) [30]
> [14] Anatoly Podgoretsky © (09.09.07 19:22)
Все знакомые мне источники, называют такие классы именно абстрактными. Хотя бы даже вот этот:
http://rsdn.ru/article/Delphi/delphiabs.xml
Ведь серьезное издание, RSDN Magazine. А тут попался такой глупый автор, да и редакторы проморгали. Нету на них Анатолия, объяснил бы ;)
Anatoly Podgoretsky (2007-09-09 19:27:00) [31]
procedure DoSomething; virtual; abstract;
вот когда будет объявление
x = class(any); abstract;
вот тогда и можно будет говорить, это абстрактный класс.
DrPass (2007-09-09 19:23:00) [32]
> Anatoly Podgoretsky © (09.09.07 19:13) [12]
В Delphi нет полностью абстрактных классов, какие есть в некоторых других языках. И нет ничего страшного, что в терминологии языка Dephi "абстрактный класс" относится к классу, содержащему абстрактные методы. Разработчики к этому привыкли и этим успешно пользуются. И впервые слышу, что кто-то там из-за этого должен оправдываться.
Тем более, что создавать экземпляры классов с абстрактными методами, хоть и можно, но крайне нежелательно, это является признаком некачественного кода
Anatoly Podgoretsky (2007-09-09 19:22:00) [33]> Инс (09.09.2007 19:20:13) [13]
Получается, если не брать в расчет старшии версии, но там я внимательно не смотрел.
Правильный термин Базовый класс
Инс (2007-09-09 19:20:00) [34]
> [12] Anatoly Podgoretsky © (09.09.07 19:13)
Это вопрос терминологии. Кстати, по такой терминологии получается, что в Delphi вообще нет абстрактных классов.
Anatoly Podgoretsky (2007-09-09 19:13:00) [35]> DrPass (09.09.2007 19:07:11) [11]
Тебе перевести, что здесь написано.
Абстрактный класс это когда нет реализации, а только одно объявление, который нельзя создать, а надо делать обязательного наследника с реализацией. Что то в этом роде появилось в последних версиях Дельфи.
В конференциях Борланда, Borland Team было вынуждено постоянно оправдываться и дезавуировать этот неудачный термин в справке. Это такой же термин, как термин база по отношению к таблицам.
DrPass (2007-09-09 19:07:00) [36]
> Это не абстрактный класс, а базовый, поэтому его правомерно
> создавать
Из справки:
TStrings contains abstract or, in C++ terminology, pure virtual methods and should not be directly instantiated.
т.е. самый что ни на есть абстрактный :)
Инс (2007-09-09 19:02:00) [37]
> Это не абстрактный класс, а базовый, поэтому его правомерно
> создавать.
Как это не абстрактный? А какой тогда абстрактный, если не этот?
Anatoly Podgoretsky (2007-09-09 12:30:00) [38]> DrPass (09.09.2007 11:27:05) [5]
На человека?
На партизана, а это не человек.
Anatoly Podgoretsky (2007-09-09 12:29:00) [39]> Дядя (09.09.2007 11:15:00) [0]
Самое интересное затихарил.
Anatoly Podgoretsky (2007-09-09 12:29:00) [40]> Инс (09.09.2007 11:24:01) [1]
Это не абстрактный класс, а базовый, поэтому его правомерно создавать.