В статье «Best Practices для исключения» (http://msdn.microsoft.com/en-us/library/seyhszts(v=vs.110).aspx) я нашел следующий пункт:Собственные конструкторы класса исключения
В C# и C++, использование по крайней мере, три общих Конструкторов, когда создания собственных классов исключений: конструктор по умолчанию, конструктор , который принимает строковое сообщение, и конструктор, который принимает строковое сообщение и внутреннее исключение.
Почему я должен определить эти три общих конструктора? Мой класс исключения бесполезен без дополнительных пользовательских свойств, и я должен передать их значения в качестве параметров в моем конструкторе класса исключений.
Это лучшая практика - никто не говорит вам, что вы _must_ делаете это. – TGlatzer
Если ваше исключение нуждается в другой информации, тогда это нормально. Лучшая практика - вот что; передовые методы, а не требования. Если вы знаете, что вам нужно сделать что-то другое, тогда сделайте что-то другое. – Servy
Что делать, если кто-то хочет выбросить ваше исключение с помощью специального сообщения? Или обернуть другое исключение? Кроме того, как говорят другие, вы можете делать все как угодно. – DavidG