Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TStrings и не понятное исключение


Страницы:   1 2 3

Дядя ©   (2007-09-09 11:15:00) 

Добрый день!
Проблема возникла. Мне неоходимо создать экзэмпляр класса TStrings. Использую при этом метод Create. Но при использовании программы, когда приходит время потрудится моему экзэмпляру, появляется исключение. Не пойму в чём дело.
Отрывки кода:
File List: TStrings;
****
FileList:=TStrings.Create;
FileList.LoadFromFile(***);
****


Инс   (2007-09-09 21:35:00) [1]

Да, Win32, но "защита" то немного туповатая, не справится со случаем, описанным в [29]. Хотя такое нововведение действительно "подменяет" термин абстрактного класса.


MetalFan   (2007-09-09 21:13:00) [2]


> Речь о .NET?

нет, это под Win32. про .Net там ни слова


Инс   (2007-09-09 21:08:00) [3]


> Мы же не про модель, а про термин абстрактный класс.

Я делал. Перечитайте мои сообщения, поймете почему.


Anatoly Podgoretsky   (2007-09-09 21:07:00) [4]

> Инс  (09.09.2007 20:55:41)  [41]

Кроме того не исключено появление этого и под Win32/64


Anatoly Podgoretsky   (2007-09-09 21:06:00) [5]

> Инс  (09.09.2007 20:55:41)  [41]

Мы же не про модель, а про термин абстрактный класс.
Я же не делал упора на модель, когда говорил, что в начале не было абстрактных методов.


Инс   (2007-09-09 20:55:00) [6]


> Не важно, важно что появились абстрактные классы

Еще как важно, совсем другая объектная модель :)


Anatoly Podgoretsky   (2007-09-09 20:54:00) [7]

> Инс  (09.09.2007 20:42:39)  [39]

Не важно, важно что появились абстрактные классы.


Инс   (2007-09-09 20:42:00) [8]


> [38] MetalFan ©   (09.09.07 20:38)

Речь о .NET?


MetalFan   (2007-09-09 20:38:00) [9]


> Но я напомню, что вроде бы в старших версиях Дельфи появились
> абстрактные классы.

именно так и есть (BDS 2006)
A class type declaration has the form
type
  className = class [abstract | sealed] (ancestorClass)
     memberList  
  end;

where className is any valid identifier, the sealedor abstractkeyword is optional, (ancestorClass) is optional, and memberList declares members - that is, fields, methods, and properties - of the class. If you omit (ancestorClass), then the new class inherits directly from the predefined Borland.Delphi.System.TObject class. If you include (ancestorClass) and memberList is empty, you can omit end. A class type declaration can also include a list of interfaces implemented by the class; see Implementing Interfaces.

If a class is marked sealed, then it cannot be extended through inheritance. If a class is marked abstract, then it cannot be instantiated directly using the Create constructor. An entire class can be declared abstract even if it does not contain any abstract virtual methods. A class cannot be both abstract and sealed.


Anatoly Podgoretsky   (2007-09-09 20:34:00) [10]

> Вася Правильный  (09.09.2007 20:28:36)  [36]

Не совсем, не только абстрактные методы, но и другие которые затрагивают хранилище данных, у этого класса оно отсутствует. AddStrings, LoadFromFile и так далее.


Вася Правильный   (2007-09-09 20:28:00) [11]


> Так TStrings ведь самостоятельно без наследования работать не может

как это? у меня работает
не трогай абстрактных методов, а остальное доступно и работает


DrPass   (2007-09-09 20:06:00) [12]


> Anatoly Podgoretsky ©   (09.09.07 19:48) [30]

Скажем, так: может, но это не имеет смысла. Как не имеет смысла и наш с вами спор, т.к. это просто бесполезная борьба терминологий. Называть ли абстрактным классом только класс, который нельзя создать, или класс, содержащий абстрактные методы.
Причин считать первый вариант истиной я не вижу, т.к. это лишь частный случай реализаций объектной модели в некоторых языках. Вы не считаете верным второй вариант. Это ваше дело, я ж вам пальцы в дверь не зажму, чтобы переубедить...


Инс   (2007-09-09 20:05:00) [13]


> Неправильно, для абстрактного класса возникала бы ошибка
> времени компиляции и программа просто бы не откомпилировалась.

А я что сказал: "И чтобы это отслеживал синтаксический анализатор и выдавал ошибки при компиляции.".


> Но я напомню, что вроде бы в старших версиях Дельфи появились
> абстрактные классы.

Не встречал. Посмотрю, уточню. Так как повторю, мне кажется невозможность сего при существующей объектной модели.


Anatoly Podgoretsky   (2007-09-09 20:02:00) [14]

> Инс  (09.09.2007 19:56:32)  [32]

Неправильно, для абстрактного класса возникала бы ошибка времени компиляции и программа просто бы не откомпилировалась.
Но я напомню, что вроде бы в старших версиях Дельфи появились абстрактные классы.


Инс   (2007-09-09 19:56:00) [15]


> Ошибки при обращение к абстрактным методам выдаются в рантайм

:)) Я в курсе. Я говорю о другом. Вы говорите "абстрактный класс" - класс, экземпляры которого нельзя создавать. И чтобы это отслеживал синтаксический анализатор и выдавал ошибки при компиляции. Так я понял? Я говорю, что это при данной объектной модели скорее всего невозможно.


Anatoly Podgoretsky   (2007-09-09 19:51:00) [16]

> Инс  (09.09.2007 19:47:29)  [29]

Ошибки при обращение к абстрактным методам выдаются в рантайм, как ты не создавай объект прямо или косвенно, это заложено в VMT на уровне генов.
Кстати так было не всегда, вначале в ТП5.5 и далее абстрактных методов не было и программисту приходилось создавать (эмулировать) их вручную, за счет создания реального метода abstract и назначая его нужным методам.


Anatoly Podgoretsky   (2007-09-09 19:48:00) [17]

> DrPass  (09.09.2007 19:40:26)  [26]

Может, пока не используешь хранилище данных, которое должно быть реализовано путем замены абстрактных методов реальными.


Инс   (2007-09-09 19:47:00) [18]

То, о чем Вы говорите, Анатолий, в среде скорее всего не реализуемо. Error вместо Warning-a то выдать можно, но как быть, если передать тип класса не напрямую, а через классовую ссылку? Синтаксический анализатор не отследит это. Я имею в виду такой случай:
TA = class; abstract;

procedure p(A: TClass);
begin
 with A.Create do begin
   ...
 end;
end;

....
p(TA);


Anatoly Podgoretsky   (2007-09-09 19:44:00) [19]

> Инс  (09.09.2007 19:39:24)  [24]

Так я и не расчитывал, что удастся перетащить в мой лагерь


{RASkov}   (2007-09-09 19:43:00) [20]

Если есть хотябы один абстрактный метод, то класс тоже абстрактный :) Ну вот так вот я привык уже...
:)
Хотя Анатолий тоже прав... т.е. не он а Тим Б :)


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо