Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.11.2011, 02:12   #1
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию Как избежать исключительных ситуаций при создании своего класса

Создал класс, для синтаксического анализа файла.
В конструкторе класса, идет поверхностный поиск нужной информации.
Остальную информацию получаю при помощи метода класса.

Но есть одни подводный камень в такой организации класса, при создании класса, может произойти исключительная ситуация и тогда класс не создаться.
Правильно ли то, что я выполняют какую-либо обработку в конструкторе? Обрабатывать исключительные ситуации в конструкторе не могу, потому что мне необходимо выводить ошибку если что-то не так.

Было название "ООП".
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.

Последний раз редактировалось mihali4; 28.11.2011 в 03:10.
chertovich вне форума Ответить с цитированием
Старый 28.11.2011, 02:45   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Если то, на чём написан ваш класс, тоже написано вами, то и ошибку следует искать именно там.

Если же ваш класс основан на средсвах предостовляемых средой, то можно поступить так:
Делать всё что надо в конструкторе, предварительно обернув в
Код:
try
{code}
 except
 обработать.  
end;
Второй вариант, минимально необходимое создать в констукторе, и убедившись, что всё нормально создано, вызвать метод в котором происходит обработка.

но можно и так:
Код:
type
  TTwo=class(TOne)
  public
  Constructor Create(Created:Boolean);

....

constructor TTwo.Create(Created:Boolean);
begin
  try
    Created:=True;
  except
    Created:=False;
  end;
end;

procedure someProc;
var
 v:Boolean;
 t:TTwo:
begin
 v:=False;
 t:=TTwo.Create(v);
  If v then
    {class создан}
  else
   {class не создан}
как правило, если обьект не создан его переменная становится nil.
если класс не создан можно и так:
Код:
procedure someProc;
var
 t:TTwo:
begin
 t:=TTwo.Create;
  If (t = nil) then
     {class не создан}
разумеется, внутри конструктора должен быть try except

Последний раз редактировалось Человек_Борща; 28.11.2011 в 02:51.
Человек_Борща вне форума Ответить с цитированием
Старый 28.11.2011, 06:08   #3
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Но есть одни подводный камень в такой организации класса, при создании класса, может произойти исключительная ситуация и тогда класс не создаться.
Собственно, так и должно быть. Это - "правильно".

Цитата:
Правильно ли то, что я выполняют какую-либо обработку в конструкторе?
Смотря какую и как.

Цитата:
Обрабатывать исключительные ситуации в конструкторе не могу, потому что мне необходимо выводить ошибку если что-то не так.
Обрабатывай в деструкторе.

См. http://www.delphikingdom.ru/asp/view...bHeader_2_6_17 - пункт 2.6.17. Обработка исключений в конструкторах.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка исключительных ситуаций в Delphi kop Помощь студентам 0 19.11.2011 20:49
Обработка исключительных ситуаций Виктория7777 Общие вопросы Delphi 2 15.12.2010 17:28
Обработка исключительных ситуаций MeTeOpA БД в Delphi 4 17.06.2010 09:58
Обработка исключительных ситуаций в delphi Cannibal Помощь студентам 2 04.11.2009 08:27
Обработка исключительных ситуаций Claster Общие вопросы по Java, Java SE, Kotlin 2 14.10.2009 14:24