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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.09.2013, 11:24   #21
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

as к несовместимому типу никаких nil, а EInvalidCast. По-крайней мере в D7
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 27.09.2013, 11:32   #22
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
а вы попробуйте
ну, я попробовал.
Project1.rar

Код:
procedure TForm1.Button1Click(Sender: TObject);
var x : TButton;
  y : TObject;
begin
 y := Form1;
 x := y as tbutton;
 if x <> nil then showmessage(x.Caption);
end;
Получаю сообщение о "Invalid class typecase"
что не так?!


p.s. ладно, спор, на мой взгляд, не о чём. Проверять тип или не проверять - личное дело программиста. я бы лично проверял. это просто, наглядно, надёжно.
Но я встречал и людей, которые блоком try except с пустым обработчиком исключения "гасят" ошибки, программа якобы работает без ошибок
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.09.2013, 11:49   #23
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

тогда мои извинения, почему-то мне казалось что это не должно вызывать исключение, да и странно почему вызывает... в с#, например, другое поведение.
eval вне форума Ответить с цитированием
Старый 27.09.2013, 11:58   #24
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,926
По умолчанию

Цитата:
почему-то мне казалось что это не должно вызывать исключение, да и странно почему вызывает
Имхо, ничего странного. На мой взгляд оператор as это предохранитель нужный (обязательный) на этапе отладки когда можно случайно по ошибке вызвать неверное приведение типа класса. Ибо такая ошибка в коде (как я уже упоминал выше) очень редко приведет к чему-либо сразу заметному. И поди потом разберись почему программа работает неправильно. А оператор as сразу всё скажет и покажет. А в релизе и оператор is нужен только при проходе по спискам Components/Controls когда мы никак заведомо не можем точно знать класс, на который указывает элемент списка.

Последний раз редактировалось northener; 27.09.2013 в 12:02.
northener вне форума Ответить с цитированием
Старый 27.09.2013, 12:11   #25
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
А в релизе и оператор is нужен только при проходе по спискам Components/Controls
ну почему только, теже обработчики могут быть висеть одни на разных, да и вообще много где.

а я т.к. делфи довно в руках держал, сейчас в основном шарп
http://msdn.microsoft.com/en-us/libr...(v=vs.90).aspx
то что-то как-то в недоумении
eval вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать так, чтобы при наведении мышкой на объект, который находится под другим, этот объект выходил на первый план? Zaza7 HTML и CSS 3 17.01.2013 10:23
Шаблоны - нужно создать объект класса abc в котором вместо aa использовался бы объект класса fff? Farrel Общие вопросы C/C++ 2 13.11.2010 17:37
sender as nark03 Общие вопросы Delphi 5 19.01.2009 17:11
sender as.. nark03 Помощь студентам 2 18.01.2009 16:13
TObject *Sender sergei64_89 Общие вопросы C/C++ 1 06.06.2008 13:36