Страница: 1 | 2 | 3 | 4 | 5 |
Вопрос: Пропустить часть ошибок
Добавлено: 15.05.09 18:05
Автор вопроса: AWР | Web-сайт:
Ответы
Всего ответов: 61
Номер ответа: 16
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #16
Добавлено: 16.05.09 12:49
Почему нельзя использовать, если он работает и в чем принципиальная разница?
Потому что это унаследованная конструкция и оставлена исключительно для совместимости со старым кодом, который переносится с VB6, она не отвечает идеологии .NET
Так и реализован. Тупо пишешь и все. Между прочим иногда очень полезно оказывается. Наверно когда-нибудь станет ключевым словом.
Копни глубже
Номер ответа: 17
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #17
Добавлено: 16.05.09 13:10
аргументировать? Я аргументы от мелкософта читал, но принципиальной разницей не проникся, все больше похоже на рекламацию для продвижения .Net технологии, но не покупаться же на это. Может быть конечно, что не ту книжку прочитал или вообще чот не догоняю, но в общем то проблем нет, для этого и общаемся, чтоб иметь общий опыт, который всегда больше, чем опыт каждого в отдельности.
Что именно аргументировать?
On Error Resume Next это не обработка ошибок, а, скорее, их "гашение" - конструкция которая просто не дает коду упасть с исключением.
Визуально никаких ошибок, разумеется, не будет, впрочем ценность кода это сводит к 0.
В общем "на пальцах", как понимаю, что такое Try Catch - который пришел в Vb.Net от C++...
К примеру обращаемся к файлу через API и вдруг он не открывается, возникает ошибка и С++ позволял считать код ошибки, который соответствовал ответу HResult c соответствующим кодом, именитая интеграция с системой в этом и заключается! А вот обработчик ошибок в VB не считывал этот код автоматом и тут как бы раработчик на С++ получал "преимущество", потаму что мог обработать ошибку по коду, а так ли это на самом деле? Вот делая вызов считаваем тот же возврат от HResult - мне к примеру интересно, почему его не читают, ведь его сама функция вызова и возвращает и ты уже или умеешь этот код ошибки в алгоритме обработать или нет, а то что тебе возвращает этот же код ошибки обработчик ошибок при перехвате ошибок, ну вроде как удобство, но так ли необходимое, если HResult и так считывается при вызове? Структурная обработка ошибок подразумевает алгоритм решение ошибки, а принимаешь решение что делать по ВОЗВРАЩЕННОМУ КОДУ, важно знать, что делать именно с ЭТИМ КОДОМ ОШИБКИ, а сам код и возможность обработки ошибки одинаково получаешь и в первом и во втором случае.
С++ здесь не при чем.
В .NET не используются коды ошибок, используются типизированные исключения. Советую внимательнее почитать про обработку ошибок в .NET.
Ошибки могут происходить не только при вызове АПИ-функций.
Номер ответа: 18
Автор ответа:
Skywalker
ICQ: 300-70-6пятьЪ
Вопросов: 62
Ответов: 545
Web-сайт:
Профиль | | #18
Добавлено: 16.05.09 14:52
напишем следующее
и посмотрим во что же компилятор превратил сию конструкцию:
а теперь напишем:
и что же получилось?:
ну как?
Номер ответа: 19
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #19
Добавлено: 16.05.09 15:01
Skywalker, приложение виндовое?
Номер ответа: 20
Автор ответа:
Skywalker
ICQ: 300-70-6пятьЪ
Вопросов: 62
Ответов: 545
Web-сайт:
Профиль | | #20
Добавлено: 16.05.09 15:21
да
Номер ответа: 21
Автор ответа:
_Serega
Вопросов: 1
Ответов: 43
Профиль | | #21
Добавлено: 17.05.09 05:30
Не нравится вызов API в примере, пусть будет COM вообще, который вызывается так же через Framework, меняются интерфейсы, но работает то все так же...
"Если компоненты .Net используются в COM, то классы исключений преобразуются в разные коды HRESULT." - Это с книжки Дан Эпплмана, он кстатьи разработчик .Net
Что такое COM - это на сегодняшний день практически весь интерфейс взаимодействия программы с внешней средой, где мы и ожидаем возникновение внештатных ситуаций и готовимся к обработке части из них(об этом речь и идет), а как в примере приведено - ну не исползует никто возникновение исключения для контроля в арефметических оперциях, а пофантазировать это да - это можно.
Номер ответа: 22
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #22
Добавлено: 17.05.09 07:04
_Serega, о чем ты?
99% .NET-овских программ не работают ни с COM, ни с API - они работают только с встроенной библиотекой классов .NET
Номер ответа: 23
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #23
Добавлено: 17.05.09 07:13
Кстати при работе с COM ты не получишь ничего кроме COMException у которого установлен HResult и, возможно, описание ошибки
Номер ответа: 24
Автор ответа:
_Serega
Вопросов: 1
Ответов: 43
Профиль | | #24
Добавлено: 17.05.09 13:21
Steel Brand, так понимаю, что если нет Frameworka и при этом эго конкретной версии, значит есть API, если мы все же в Windows, тогда на какой именно версии Framework работает WindowsXP, которая сегодня является доминирующей?))))
Номер ответа: 25
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #25
Добавлено: 17.05.09 13:59
_Serega, если на компьютере нет .NET Framework, то программа не запустится и дальнейшие твои рассуждения неверны.
тогда на какой именно версии Framework работает WindowsXP
Windows XP не зависит от .NET Framework какой-либо версии
Номер ответа: 26
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #26
Добавлено: 17.05.09 15:59
Звучит пафосно ))
Номер ответа: 27
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #27
Добавлено: 17.05.09 20:11
VBD, в параллельном топике я жду код как унаследовать класс от String.
Номер ответа: 28
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #28
Добавлено: 17.05.09 20:34
Жди.
Номер ответа: 29
Автор ответа:
_Serega
Вопросов: 1
Ответов: 43
Профиль | | #29
Добавлено: 19.05.09 08:27
Тут ты серьезно неправ.
Windows - работает на API вызовах, а нa .Net всего лишь создается виртуальная машина, навроде как это на Java было много лет взад сделано.
Во первых иерархия виртуальной машины для .Net выглядит следующим образом (с верхнего уровня на нижний):
1 CLR, COM, другие библиотеки
2 WIN32 API
3 Оборудование
В вторых уровень CLR, на которой Net и крутится как правило фиксируя "чужие ошибки" просто не понимая и не признавая собственных и считая себя эталоном правильности. Мне лично пришлось не раз уже обнаруживать их в ходе программирования, начиная с гонок в простейшей арифметике - навроде вот прям с отладчика набираю:
?Csng(0.0001)* CInt(10)
0.0009999999
и мног еще чего всякого - это недавно отлаживать пришлось, от того и вспомнил первым и никаких ошибок .Net отчего то не фиксирует при этом вообще, типо проста насчитал праильно и все! В общем разницы между OnError и Try по большому счету нет, просто пиар от макрософта.
Номер ответа: 30
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #30
Добавлено: 19.05.09 10:41
_Serega, я пишу на .NET 5 с лишним лет, твой же опыт, судя по всему, ограничивается чтением нескольких книг типа Эпплмана. Эпплман все правильно написал, но нужно понимать кто такой Эпплман, с какой целью и когда он писал эту книгу. А после этого взять и почитать настоящие книги по .NET типа Рихтера.
2 WIN32 API
3 Оборудование
Какие такие "другие библитоеки"?
Забудь ты наконец про этот COM! COM в .NET используется очень редко, в частности при работе с HTML DOM, VSTO (интерфейсы Office почти все на COM работают, не считая нескольких классов-оберток), при расширении возможностей Windows Shell (и то в роли провайдера COM), ну может еще какие-то Legacy-компоненты которые не перенесены и не будут перенесены на .NET.
Win32API кстати тоже почти не используется (чаще при программировании под Windows Forms).
В вторых уровень CLR, на которой Net и крутится как правило фиксируя "чужие ошибки" просто не понимая и не признавая собственных и считая себя эталоном правильности
мда...
?Csng(0.0001)* CInt(10)
0.0009999999
А не судьба прочитать про то как работают типы с плавающей запятой прежде чем такие ляпы делать? Операции с плавающей запятой всегда на всех платформах во всех языках прогарммирования дают погрешность.
и мног еще чего всякого - это недавно отлаживать пришлось, от того и вспомнил первым и никаких ошибок
Приведи примеры этого еще чего всякого.
жесть...
В общем разницы между OnError и Try по большому счету нет, просто пиар от макрософта.
Блин я под столом валяюсь...
Можешь с помощью On Error ... сделать что-то типа такого?
Правильный ответ - не сможешь. И даже не будешь пытаться, по одной простой причние - ты не знаешь как обратабывать ту или иную ситуацию, и даже не задумывался о том что их можно обрабатывать по разному. И даже не задумывался что их вообще можно как-либо обрабатывать кроме как проигнорировать.
Разницы между On Error и Try НЕТ только в том случае, если единственное для чего ты их используешь - для того чтоб погасить исключение и не дать коду упасть. Но это не обработка ошибок, это иллюзия того что код работает без ошибок.