Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
112 / 83 / 32
Регистрация: 10.08.2014
Сообщений: 420

Может ли рефлексия каким-то образом узнать о перехватываемом исключении в создаваемом объекте

18.04.2016, 00:37. Показов 1651. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть класс покупок:
C#
1
2
3
4
5
6
7
8
9
10
11
class PricePurchase : Purchase
    {
        private decimal fixedDiscount = 5000m;
 
        public PricePurchase(string name, decimal price, int quantity, decimal fixedDiscount)
            : base(name, price, quantity)
        {
            if (Price < fixedDiscount||fixedDiscount<=0)
                throw new Exception();
            this.fixedDiscount = fixedDiscount;
        }
И есть класс, которому нужно создавать класс покупок через рефлексию и в нём есть следующие строки:
C#
1
2
3
4
5
6
7
8
try
                    {
                        return (Purchase) constructorDerived.Invoke(argsDerived);
                    }
                    catch (TargetInvocationException)
                    {
                        throw new CsvLineException(csvString, "Invalid discount. The one is more than a price or isn't positive");
                    }
В нём перехватывается исключение, вызванное классом покупки и вызывается собственный обработчик... Мне не нравится, что я изменил класс покупок и его исключение не перехватывается (раньше перехватывалось там же) - так вот, может ли рефлексия как-то узнать о обработанном исключении вызываемого объекта или мне всё равно придётся так или иначе изменить класс покупки, например, введя в обработчик событие, сигнализирующее рефлексии об исключении.

Добавлено через 4 минуты
Поясню. Если просто обрабатывать исключение в классе покупок, то рефлексия всё равно создаст объект и он будет ошибочным... или может дублировать код исключения из класса покупок в рефлексии... да, похоже лучше уж так... китайский код против индусского (

Добавлено через 2 минуты
А с другой стороны теоретически с чего это рефлексия должна знать - чем вызываются исключения создаваемого класса.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.04.2016, 00:37
Ответы с готовыми решениями:

Диалоговое окно в создаваемом объекте
Создаю некий объект, который экспортирует данные. Во время своей работы этот объект выводит окно с индикатором хода процесса. Может ли это ...

Каким образом узнать системный раздел?
User mode функции не доступны в kernel-mode, однако надо как то узнать системный раздел. Прочитал что можно в system32 попасть ссылкой...

Каким образом auto может улучшить производительность?
В книге у Мейерса говорится о том, что с точки зрения производительности выводить тип для лямбды лучше через auto. То что такая запись...

3
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
18.04.2016, 01:51
Лучший ответ Сообщение было отмечено baliar как решение

Решение

baliar, Мозг немного вскипает от попыток понять что же вам нужно
На всякий случай спрошу - вы ведь знаете, что истинное исключение передается внутри TargetInvocationException, в поле InnerException?
Почему бы вам не генерировать исключение в PricePurchase следующим образом:
C#
1
throw new Exception("Invalid discount. The one is more than a price or isn't positive");
А перехватывать его вот так:
C#
1
2
3
4
            catch (TargetInvocationException ex)
            {
                throw ex.InnerException;
            }
0
112 / 83 / 32
Регистрация: 10.08.2014
Сообщений: 420
18.04.2016, 14:40  [ТС]
А можно уничтожить объект в обработчике?

Добавлено через 1 час 44 минуты
Извиняюсь за беспокойство... Добавил булево свойство ошибки в класс покупки. Наверное, проблема решена. Не айс, но всё же.

Добавлено через 17 минут
Цитата Сообщение от Storm23 Посмотреть сообщение
Мозг немного вскипает от попыток понять что же вам нужно
Да мне то собственно ничего особенного и не нужно, но преподаватель ругается на то, что в классе покупки необработанное исключение висело... да и мне не нравится - изменять работавший класс, как-то это против принципов модульности. Свойство хотя бы никому не мешает - есть себе и есть, почему бы классу его не иметь.

Добавлено через 21 минуту
Хотя лучше уничтожить объект в обработчике...
0
18.04.2016, 14:45

Не по теме:

Цитата Сообщение от baliar Посмотреть сообщение
И есть класс, которому нужно создавать класс покупок через рефлексию и в нём есть следующие строки:
Цитата Сообщение от baliar Посмотреть сообщение
изменять работавший класс, как-то это против принципов модульности
как то странно все это...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.04.2016, 14:45
Помогаю со студенческими работами здесь

Каким образом узнать текстовую часть надписи поля
Доброго времени суток! Собственно сабж. Имеется поле &quot;pl1&quot; на форме и присоединенная мастером надпись (&quot;Надпись1&quot;) с...

Как узнать, каким образом была закрыта форма?
Здравствуйте. Подскажите как узнать каким образом была закрыта форма. ( Form_Close() ) под действием пользователя, который нажал...

Интересно узнать каким образом скрывают файлы и папки?
Каким образом это делают программы типа Lock Folder, Hide Folders и подобные?.. Возможно ли такое реализовать самому в Delphi?

Каким образом может это перевести в базис Стрелки Пирса?
\ (\bar{x}\bar{y}\bar{z}t)+(\bar{x}\bar{y}zt)+(x\bar{y}\bar{z}t)+(x\bar{y}z\bar{t})+(x\bar{y}zt)+(xy\bar{z}t)

Каким образом можно узнать букву диска, на который установлена ОС?
Ребят, подскажите пожалуйста, каким образом можно узнать букву диска, на который установлена ОС?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru