2012-04-29 26 views
2

我有一個套接字封裝庫,我一直在處理這個句柄,除此之外,在開始時進行了一次小小的握手,以確保您與之通話的任何人使用與您一樣的協議和設置。我創建了自己的異常類的標準方式:自定義異常應該有自己的ErrorCode嗎?

private class NSocketProtocolException : System.Exception 
    { 
     public NSocketProtocolException(string message) : base(message) { } 
    } 

我拋出這個例外的原因有多種,比如,如果客戶端和服務器沒有使用該協議的版本相同,如果一個人想用加密和其他沒有,等等。現在我是唯一一個使用這個庫的人,但我試圖設計它足夠友好,以便將來其他人可以。爲了讓其他程序員能夠對拋出異常的不同實例做更有價值的事情,我是否應該擁有自己的自定義錯誤代碼以適應這些情況?

我真的不知道如何編輯錯誤代碼,但更重要的是,我不想使用另一種類型的異常使用的相同錯誤代碼。有什麼想法嗎?

回答

3

您不需要錯誤代碼,異常消息是有關異常的詳細信息的地方。如果您使用錯誤代碼,您將不得不在某處記錄錯誤代碼,對嗎?所以這個描述可以在異常消息中。你的代碼的用戶可以通過類型來捕獲異常。

如果需要存儲有關的異常或約方面的一些數據,使用Exception.Data,例如你可以把異常的數據時間戳,或在Web應用程序,你可以把當前請求的URL中的數據等

另外請務必閱讀這篇關於custom exceptions的博客文章,你真的需要他們嗎?

+0

我想在這裏認爲自定義異常是適當的。作爲一個套接字包裝器,它的行爲應該和套接字相同,所以它的想法是它會在它無法連接的情況下拋出一個異常,就像socket.connect因爲這個原因拋出異常一樣。我不想拋出一個socketexception,所以程序員有一個更好的想法出了什麼問題 – cost

+0

好吧,我沒有說自定義異常是不恰當的,只是想引起注意的事情:) –

1

只要公開異常(添加其他構造函數),那麼如果任何使用它的人都認爲需要在某些下游應用程序中無法處理異常的錯誤代碼,則可以添加它們自己的異常。

+0

我的意思是,錯誤代碼給出了爲什麼庫本身拋出異常的細節。因此,程序員將有辦法知道是否由於協議握手錯誤而拋出異常,或者是因爲服務器只接受加密連接。 – cost

+0

錯誤代碼就像Unknown oleError(5)一樣。如果您想要將更多數據添加到例外情況,例如收到{1}的Bad Handsake預計{0},請繼續前進。與通常的「sumfin」混淆,我也失去了堆棧跟蹤,所有都將是金色的。 –