嗨任何人都可以告訴我如何在C#中編寫用戶定義的異常嗎?正如我們在Java中可以用C#編寫的那樣?如何在C#中編寫用戶定義的異常?
5
A
回答
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)
- 避免深層命名空間層次結構。
- 如果可能,請從一個提供的公共基地例外中獲得,即
ArgumentException
。 但是不要從ApplicationException
派生。這不是有害的,這是沒有意義的。 MSDN Blog Post on ApplicationException。 - 使用「例外」後綴。
- 通過實現
ISerializable
接口,可以使例外序列化。顯然,一個異常必須是可序列化的才能跨應用程序域和遠程邊界正確工作。 - 將安全敏感信息存儲在專用異常狀態中,添加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) { }
}
相關問題
- 1. 如何在c中編寫自定義異常時使用內部異常#
- 2. C#用戶定義的異常,在異常之間轉換?
- 3. 如何在靜態庫中處理異常或編寫自定義異常類?
- 4. 在C++中編寫自定義異常類時,如何重載throw函數?
- 5. 用戶定義的異常
- 6. 在C++中編寫的COM客戶端中拋出異常返回值異常
- 7. 如何在FxCop中編寫AvoidCallingProblematicMethods異常?
- 8. 如何在Python中實現用戶定義的異常?
- 9. java中用戶定義的異常的編碼風格
- 10. 如何在shell腳本中編寫用戶定義的選項?
- 11. 如何從用戶輸入在Ruby中創建用戶定義的異常
- 12. SQL如何處理用戶定義函數中的異常?
- 13. 如何讓異常在C#中定義自己的消息?
- 14. 如何在目標c中編寫自定義測試用例?
- 15. 由用戶定義的異常
- 16. ArrayIndexOutOfBoundsException的用戶定義異常
- 17. Axis2:處理用戶定義的異常
- 18. XmlJavaTypeAdapter拋出用戶定義的異常
- 19. 用戶定義異常的實現
- 20. C#中自定義異常的Interview_Question
- 21. C++中的自定義異常
- 22. 自定義異常類C++
- 23. 如何編寫bash並在命令行中定義awk常量
- 24. 如何定義異常?
- 25. 添加用戶定義的異常和異常處理程序
- 26. 如何在c#中編寫自定義的「textChanged」函數?
- 27. 如何在R中編寫自定義S3類的c()函數
- 28. 如何使用基於C#中自定義異常構造的函數拋出自定義異常?
- 29. 如何在C++中定義運行時異常?
- 30. 如何在c中創建自定義異常#
根據.NET Framework設計指南,您應該直接從Exception中繼承,除非您有充分的理由選擇其他東西。 – 2010-10-04 05:16:04
@Jonathan:所有系統恢復正常。刪除了我愚蠢的答案,並刪除了我無用的評論。以SO精神的名義高舉答案。感謝您的糾正。 – 2010-10-04 05:21:08