11

基本クラス ライブラリの .NET 例外クラスにデフォルトで変更可能なメンバーが含まれているのはなぜだろうか

  • と の値を から変更できるのにSource、のようなものは変更できないのはなぜですか?HelpLinkDataMessage
  • 例外をスローすると、変更可能になるように書き換えられるのはなぜStackTraceですか? スタック トレース情報を既存のトレースに追加することは、より良い設計になりますか (ただし、変更可能です)?
  • .NET 例外設計でどのような改善が考えられますか?

デザインのチョイスだけでも面白い…

4

1 に答える 1

10

少なくとも私にはStackTrace理にかなっています。アイデアは、Exception(オブジェクトとして) が渡されたり、メソッドから返されたりする可能性があるということStackTraceです。 は、例外がスローされてキャッチされるときにのみ重要です。ある意味でStackTraceは、実際にはオブジェクト自体ではなく、例外のスローのプロパティです。Exception

他のプロパティの変更可能性に関しては、コンストラクターにすべてを強制するよりも、プロパティに割り当てることでインスタンスを構築する方が簡単だからだと思います。C# が設計された時点Exceptionでは、C# にはオプションのパラメーターがなかったことを思い出してください。

Exceptionおよび派生クラスが不変である再設計を検討できますが、これには例外ファクトリまたはビルダー クラスが必要になります。それは、それからの派生をExceptionより複雑にするだけです。

于 2010-06-20T19:02:20.827 に答える