10
我不知道爲什麼從基類庫的.NET的異常類,默認擁有一些可變成員爲什麼.NET異常是可變的?
- 爲什麼我可以改變從
Data
的Source
,HelpLink
和價值觀,但不能改變其他任何類似的Message
? - 爲什麼拋出異常會重寫
StackTrace
使其變得可變?追加堆棧跟蹤信息到現有的跟蹤會更好的設計(但仍然可以)? - .NET異常設計可能有哪些改進?
我只是在設計上選擇感興趣的......
我不知道爲什麼從基類庫的.NET的異常類,默認擁有一些可變成員爲什麼.NET異常是可變的?
Data
的Source
,HelpLink
和價值觀,但不能改變其他任何類似的Message
?StackTrace
使其變得可變?追加堆棧跟蹤信息到現有的跟蹤會更好的設計(但仍然可以)?我只是在設計上選擇感興趣的......
的StackTrace
對我來說很有意義,至少。這個想法是,一個Exception
(作爲一個對象)可能被傳遞,從方法返回等等。StackTrace
只有在引發和捕獲異常時才重要。從某種意義上說,StackTrace
真的是越拋出異常,而不是Exception
對象本身的的財產。
至於其他性質的可變性,我認爲它只是因爲它更容易將其分配給的屬性,而不是強迫他們都到構造函數構造一個實例。請記住,在設計時刻Exception
時,C#沒有可選參數。
你可以考慮重新設計,其中Exception
和派生類是不可變的,但是這需要一個異常工廠或生成器類。它只會從Exception
派生出更加複雜的結果。
好的,如果問題是將大量數據傳遞給異常,爲什麼'Message'屬性是隻讀的? – ControlFlow 2010-06-20 19:14:47
關於'StackTrace'的不錯想法... – ControlFlow 2010-06-20 19:20:18
'Message'是一個非可選的信息片段,因此將它放在構造函數中是有意義的。 – 2010-06-20 19:23:15