Попробуйте, поймать внутри конструктора, который вызывает базовый конструктор - PullRequest
1 голос
/ 30 декабря 2011

Извините за запутанный заголовок.По сути, я создал класс BinaryReader, который читает с прямым порядком байтов, и установил его конструктор следующим образом:

BinaryReader2(System.IO.Stream strm) : base(strm){}

Мне сказали, что нельзя вызывать конструктор базового класса любым другим способом, и что это был лучшийспособ сделать это.

Проблема в том, что когда другая программа контролирует файл, который я пытаюсь прочитать, он не отображает никаких сообщений об ошибках (потому что я новичок в программировании и не настроил никакой попытки tryзаявления..).Итак, я пытаюсь учесть все возможные ситуации, используя операторы try-catch.Я никогда не использовал их раньше, поэтому я надеялся, что смогу получить несколько указателей на это.

Я создал класс binaryreader2 во многих местах по всей программе и надеялся, что смогу установить функцию try в самом классе бинарного чтения, а не в каждом из мест, где я его использовал.Можно ли это сделать и при этом вызвать конструктор базового класса?

Ответы [ 2 ]

1 голос
/ 30 декабря 2011

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

0 голосов
/ 30 декабря 2011

Я никогда не использовал их раньше, поэтому я надеялся, что смогу получить несколько указателей на это.

  • В общем, используйте Try / Catch вокруг кода, который «выходит наружу» для чего-то.Вещи, которые ваша программа не контролирует.Извлечение файла, получение данных из базы данных и т. Д.

  • Попробуйте заблокировать как можно меньше кода.Например, оберните только вызов выборки файла в Try, а не все, что происходит после этого.IE, как сказал @Marc выше, когда у вас есть действительный объект FileStram, нет смысла помещать его в блок Try.

  • Если вы сделаете вышеупомянутое, то сможете поймать очень специфические типы исключений.,Это позволит вам выдавать хорошие сообщения об ошибках о проблеме или иным образом обрабатывать проблему в коде, чтобы ваша программа не просто взорвалась.

  • Внимательно изучите разницу междубросая исходный тисок исключения, выбрасывая новый экземпляр исключения.

  • Предложение: Оберните свой начальный Run () в Try и в блоке Catch сделайте что-нибудь с ним.Узнайте о «публикации».Вы можете отправить себе электронное письмо, например.Запишите исключение в базу данных, запишите в файл журнала.

  • С учетом вышеизложенного затем в каждые Catch везде в вашем приложении всегда повторно выбрасывайте (см. Мое предупреждение выше) исключение, и выесть одна точка, где вы делаете что-то полезное.

...