Почему я должен всегда делать свои Исключения ? (.СЕТЬ)

Ссылаясь на то, что является правильным способом создания сериализуемого пользовательского .NET-исключения?
и все ли исключения .NET являются сериализуемыми? …

Почему мои исключения могут быть сериализуемыми?
Кто-то сказал, что «это можно считать ошибкой», если настраиваемое исключение, определенное сторонней библиотекой, не является сериализуемым. Зачем?

Почему в этом отношении исключения отличаются от других classов?

Поскольку ваши исключения, возможно, должны быть распределены между различными AppDomains, и если они не являются (правильно) сериализуемыми, вы потеряете важную информацию об отладке. В отличие от других classов, у вас не будет контроля над тем, будет ли ваше исключение настроено – это будет.


Когда я имею в виду, что «у вас не будет контроля», я имею в виду, что classы, которые вы создаете, обычно имеют ограниченное пространство существования, и существование хорошо известно. Если это возвращаемое значение, и кто-то пытается вызвать его в другом приложении AppDomain (или на другом компьютере), он получит ошибку и может просто сказать «Не используйте его таким образом». Вызывающий абонент знает, что он должен преобразовать его в тип, который может быть сериализован (путем переноса вызова метода). Тем не менее, поскольку исключения пузырятся до самого верха, если не пойманы, они могут преодолеть границы AppDomain, о которых вы даже не знали. Специальное исключение для приложения 20 уровней, находящихся в глубине другого AppDomain, может быть исключением, указанным в Main (), и ничто на пути не превратит его в сериализуемое исключение для вас.

Помимо ответа Talljoe, ваши исключения могут передаваться и через Web-сервисы, в этом случае исключение должно быть сериализуемым / десериализуемым, чтобы его можно было преобразовать в XML и передать через веб-службу

Я думаю, что значение по умолчанию для всех classов должно быть Serializable, если они не содержат class, который явно не сериализуется. Досадно не переносить class только потому, что какой-то дизайнер не думал об этом.

То же самое с «Финалом», все переменные по умолчанию должны быть «Финальными», если вы специально не заявляете, что они «Mutable».

Кроме того, я не уверен, что имеет смысл иметь переменную, которая не является частной.

Ну, мне нужно разработать собственный язык.

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

Другое место, где объекты должны быть сериализуемыми, – это сеанс Asp.Net. Мы сохраняем последнее исключение в сеансе, а не сериализуемые исключения нуждаются в дополнительном переводе, чтобы хранить их данные как сериализуемые (указание исходного исключения как внутреннего не помогает)

Давайте будем гением компьютера.