2010-10-04 62 views

回答

11

它與Java中的幾乎相同 - 擴展了Exception類。

以最基本的形式。

public class CustomException : System.Exception 
{ 
    public CustomException() 
    { 
    } 

    public CustomException(string message) 
    : base(message) 
    { 
    } 

    public CustomException(string message, System.Exception innerException) 
    : base(message, innerException) 
    { 
    } 
} 

爲此,然後使用字段或屬性添加要捕獲的數據。

出於興趣,在回答此問題之前,我檢查了自定義例外的Microsoft Design Guildlines。 Designing Custom Exceptions(MSDN)

  1. 避免深層命名空間層次結構。
  2. 如果可能,請從一個提供的公共基地例外中獲得,即ArgumentException但是不要從ApplicationException派生。這不是有害的,這是沒有意義的。 MSDN Blog Post on ApplicationException
  3. 使用「例外」後綴。
  4. 通過實現ISerializable接口,可以使例外序列化。顯然,一個異常必須是可序列化的才能跨應用程序域和遠程邊界正確工作。
  5. 將安全敏感信息存儲在專用異常狀態中,添加SecurityPermission屬性以確保只有受信任的代碼才能獲取信息。

高度建議您閱讀MSDN上的Design Guidelines

16

你想從System.Exception繼承,並最好提供(至少)相同的公共構造函數並將參數傳遞給基礎構造函數。添加您認爲適合您特定需求的相關屬性和/或方法。

public class MyException : System.Exception 
{ 
    public MyException() : base() { } 
    public MyException(string message) : base(message) { } 
    public MyException(string message, Exception innerException) : base(message, innerException) { } 
} 
+0

根據.NET Framework設計指南,您應該直接從Exception中繼承,除非您有充分的理由選擇其他東西。 – 2010-10-04 05:16:04

+0

@Jonathan:所有系統恢復正常。刪除了我愚蠢的答案,並刪除了我無用的評論。以SO精神的名義高舉答案。感謝您的糾正。 – 2010-10-04 05:21:08

相關問題