共用方式為


例外狀況 (C# 與 Java 的比較)

更新:2007 年 11 月

C# 在處理例外狀況上和 Java 十分類似。

執行程式期間若發生嚴重錯誤,.NET Framework Common Language Runtime (CLR) 會隨時建立 Exception 物件以詳述錯誤。在 .NET Framework 中,Exception 是所有例外狀況類別的基底類別。衍生自 Exception 類別、SystemExceptionApplicationException 的例外狀況有兩大分類。System 命名空間中的所有型別全都衍生自 SystemException,而使用者定義例外狀況則應從 ApplicationException 衍生,以便區分執行階段錯誤和應用程式錯誤。一些常見的 System 例外狀況包括:

和在 Java 中一樣,如果您有程式碼必須為發生例外狀況負責,請將此程式碼放置在 try 區塊內。緊接在後的一個或多個 catch 區塊提供錯誤處理,也可以使用 finally 區塊來執行想要執行的程式碼,不論是否會擲回例外狀況。如需詳細資訊,請參閱 try-catch (C# 參考)try-catch-finally (C# 參考)

使用多重 catch 區塊時,攔截到的例外狀況必須依照發生機率以遞增方式排列,因為只有第一個符合擲回之例外狀況的 catch 區塊才會被執行。C# 編譯器會強制執行這項工作,Java 編譯器則不會。

此外,在 C# 中,catch 區塊不需要引數,在 Java 中則需要,在沒有引數的情況下,catch 區塊將適用於任何 Exception 類別。

例如,讀取檔案時可能會遇到 FileNotFoundExceptionIOException,您會想要先排列較明確的 FileNotFoundException 處理常式,如以下程式碼所示:

try
{
    // code to open and read a file
}
catch (System.IO.FileNotFoundException e)
{
    // handle the file not found exception first
}
catch (System.IO.IOException e)
{
    // handle any other IO exceptions second
}
catch
{
    // a catch block without a parameter
    // handle all other exceptions last
}
finally
{
    // this is executed whether or not an exception occurs
    // use to release any external resources
}

可以藉著從 Exception 衍生,建立自己的例外狀況類別。例如,下列程式碼會建立 InvalidDepartmentException 類別,若新 Employee 的部門無效,您可能會擲回這個類別。使用者定義例外狀況的類別建構函式會使用 base 關鍵字來呼叫基底類別建構函式,傳送適當的訊息:

public class InvalidDepartmentException : System.Exception
{
    public InvalidDepartmentException(string department) : base("Invalid Department: " + department)
    {
    }
}

接著,可以使用類似下列的程式碼擲回例外狀況:

class Employee
{
    private string department;

    public Employee(string department)
    {
        if (department == "Sales" || department == "Marketing")
        {
            this.department = department;
        }
        else
        {
            throw new InvalidDepartmentException(department);
        }
    }
}

C# 不支援核取的例外狀況。在 Java 中,這種例外狀況是使用 throws 關鍵字宣告,以指定方法可以擲回必須由呼叫程式碼處理的特定型別例外狀況。

請參閱

概念

C# 程式設計手冊

參考

例外狀況和例外處理 (C# 程式設計手冊)

其他資源

Java 開發人員可用的 C# 程式設計語言