Изучив большинство ответов здесь, я хотел бы добавить пару мыслей.
Использование XML-документации Комментарии и ожидание того, что другие будут полагаться, - плохой выбор. Большая часть кода C #, с которым я столкнулся, не документирует методы полностью и согласованно с XML-комментариями к документации. И еще одна проблема, которая заключается в том, что без проверенных исключений в C # как вы могли бы документировать все исключения, которые выдает ваш метод, чтобы пользователь API знал, как обрабатывать их все по отдельности? Помните, что вы знаете только о тех, кого вы выбросили с помощью ключевого слова throw в вашей реализации. API, которые вы используете внутри реализации вашего метода, могут также генерировать исключения, о которых вы не знаете, потому что они могут не документироваться, а вы не обрабатываете их в своей реализации, поэтому они будут взорваны перед лицом вызывающей стороны вашего метод. Другими словами, эти комментарии к документации XML не являются заменой проверенных исключений.
Андреас связал интервью с Андерсом Хейлсбергом в ответах здесь о том, почему команда дизайнеров C # отказалась от проверенных исключений. Окончательный ответ на первоначальный вопрос скрыт в этом интервью:
Программисты защищают свой код, написав try finally везде, поэтому они будут корректно возвращаться в случае возникновения исключения, но на самом деле они не заинтересованы в обработке исключений.
Другими словами, никого не должно интересовать, какое исключение можно ожидать для конкретного API, поскольку вы всегда будете собирать их все повсюду. И если вы хотите по-настоящему заботиться о конкретных исключениях, решать, как их обрабатывать, решать вам, а не тому, кто определяет сигнатуру метода с помощью чего-то вроде ключевого слова Java throws, что вызывает особую обработку исключений для пользователя API.
-
Лично я здесь разрываюсь. Я согласен с Андерсом в том, что проверка исключений не решает проблему, не добавляя новые проблемы. Как и в случае с комментариями к документации XML, я редко вижу код C # со всем, что заключено в блоки try finally. Мне кажется, что это действительно ваш единственный выбор и что-то вроде хорошей практики.