Я не собираюсь реализовывать ключевое слово Java "throws". См. http://www.artima.com/intv/handcuffsP.html для обсуждения достоинств ключевого слова throws и почему оно не было реализовано в С#.
Мне, однако, любопытно, есть ли способ создать атрибут, подобный следующему:
[ThrowsException( exceptionType = NullReferenceException )]
[ThrowsException( exceptionType = AuthenticationException )]
public void Login( Credentials credz )
{
// ... etc...
}
такой, что - при вызове метода, который был украшен одним или несколькими атрибутами ThrowsException, тип исключений, вызванных указанным методом (по крайней мере, тех, которые явно объявлены атрибутом ThrowsException), будет виден в документации метода
Это не то же самое, что ключевое слово "throws" Java, так как оно не требует, чтобы вызывающая сторона обрабатывала эти исключения. Это может привести к серьезным изменениям, например, в клиентском приложении, которое не обрабатывает новые исключения, вызванные изменением версии.
В то время как можно использовать:
/// <exception cref="member">description</exception>
Мое намерение использовать атрибуты состоит в том, чтобы проект не компилировался, если имя исключения было изменено или если исключение больше не существует. Поэтому Как задокументировать сгенерированные исключения - это не тот же вопрос.
Обновление: 2013-05-23
Я нашел способ решения проблемы с помощью атрибута и без использования плагинов. Я постараюсь обойти это в эти выходные и буду рад опубликовать решение, если оно будет работать, как ожидалось. Если кто-то побеждает меня в публикации решения, я с радостью приму его ответ.
Так как я не смогу обойти это до понедельника, я предлагаю вознаграждение, если вы можете победить меня - приемлемый ответ:
- (не включает использование подключаемого модуля Visual Studio или любого стороннего инструмента
- & Amp; & Amp; предоставить способ включить исключение (я) в документацию XML
- & Amp; & Amp; обеспечить безопасность типов во время компиляции)
- || доказать, что невозможно выполнить предыдущие три требования, чтобы обеспечить решение проблемы, поставленной в этом вопросе
Я считаю приемлемым, чтобы документация XML не отражала исключения из атрибутов ThrowsException до тех пор, пока проект не будет собран.
Было бы интересно увидеть решение на основе Resharper (поскольку оно является общим для большинства мастерских разработчиков, в которых я работал), но оно не будет принято, если есть решение, которое остается независимым от сторонних инструментов. Аналогично, решение, которое работает только в Visual Studio, будет принято поверх решения, зависящего от Resharper, но оно не будет принято, если есть решение, которое будет работать в других средах разработки, например. MonoDevelop (больше поддерживаемых фреймворков - еще лучше).