2012-03-22 38 views
4

可以說我有一個抽象類:抽象類:當子類沒有正確實現時應拋出哪個異常?

abstract class MyAbstract 
{ 
    protected abstract object ImplementMePlz(); 

    public object DoSomething() 
    { 
     // Some logic here 

     var result = ImplementMePlz(); 
     if (result == null) 
      throw new YourChildClassIsStupidException("ImplementMePlz() should never return null."); 

     return result; 
    } 
} 

我應該在這種情況下拋出什麼樣的異常?在.NET框架中是否存在指定的異常,還是應該創建自己的自定義異常?

+0

東西,我會拋出'ArgumentNullException'但我不知道這完全符合。 – Jeff 2012-03-22 19:02:42

+7

「YourChildClassIsStupidException」異常有什麼問題? – CAbbott 2012-03-22 19:03:05

回答

4

問題的答案「在.NET框架中是否存在指定的異常?」是「否」 - 沒有這樣的例外。

如果我是你,我會創建一個自定義異常。

1

你應該製作你自己的異常類。該框架沒有例外,我知道要處理這種情況。爲什麼?我認爲框架不需要這個例外。

此外,我建議使用Code Contracts來防止異常的第一位。

+2

確實如此,但是您必須擔心派生類中的內容沒有正確執行*。 – RobSiklos 2012-03-22 19:08:33

+0

啊,更新答案以反映這 – 2012-03-22 19:09:09

0

這取決於你的孩子類爲什麼返回null。將異常拋出到子類中可能更有意義,因爲它會更好地理解它爲什麼返回null並且可以產生更多信息異常。

如果你無法控制孩子,那麼你應該做兩件事情之一。

  1. 您可以從空返回中推斷出一些信息。您應該創建一個傳遞該知識的例外,例如該API指出,如果其中一個輸入無效,您應該返回null,並拋出一個InvalidArgumentExpection。

  2. 你只知道它不能爲空,如果這種情況下,拋出異常ArgumentNull或類似

+0

問題是我不一定會成爲寫孩子班的人。如果我正在編寫一個API,任何人都可以編寫子類,並且他們需要知道返回null根本不起作用。基本上,例外是爲了開發者的利益,而不是用戶的利益。 – Phil 2012-03-22 19:25:34

+0

好的,更新了答案 – Ben 2012-03-22 19:36:31

相關問題