C# Finally 关键字

2025 年 9 月 4 日 | 阅读 6 分钟

在 C# 编程语言中,finally 块是 异常处理 的一个关键特性。它用于编写无论是否发生异常都会始终执行的清理代码。这对于执行多种任务非常有用,例如关闭文件、释放数据库连接或断开与数据库的连接。finally 块写在 try/catch 块之后,位于末尾。finally 语句中的代码总是在程序中运行,这使其成为资源管理的可靠场所。

Finally 关键字的语法

它具有以下语法。

在这个语法中,

  • Try: try 块包含可能引发异常的代码。
  • Catch: catch 块处理发生的异常。
  • Finally: 无论是否抛出异常,finally 块都会在所有情况下执行。

C# 中简单的 finally 块示例

让我们举一个例子来说明 C# 异常处理中的 finally 块。

示例

编译并运行

输出

其输出如下

情况 1:(有效输入)

如果我们输入一个正数,输出将是

Enter any positive number:
5
The result is 2
Finally block has been executed.
The program continues execution after exception handling.

情况 2:(无效输入)

如果我们输入字母值,输出将是

Enter any number for your choice:
abc	
Please enter any valid number.
Finally block has been executed.
The program continues execution after exception handling.

情况 3:(除以零)

如果我们输入 0,输出将是

Enter any number for your choice:
0
Division by zero is not allowed.
Finally block has been executed.
The program continues execution after exception handling.

说明

在此示例中,我们演示了 finally 块在 C# 异常处理中的工作原理。首先,我们使用 try 块,提示用户输入一个数字以执行除法运算。如果用户输入有效,程序将运行并显示输出。如果用户输入无效,例如零或字母,则会发生异常。但是,无论用户输入是否有效,finally 块都会始终执行。

C# 中 Finally 块的特点

C# 中 finally 块的几个特点如下:

  • 无论是否抛出异常,finally 块在所有情况下都会运行。
  • finally 块可以与 catch 块一起使用,也可以不使用 catch 块。
  • 它用于关闭文件、释放数据库或断开与数据库的连接等任务。
  • finally 块不允许使用条件语句,包括 break、continue 或 return。

不带 catch 块的 finally 块的执行

C# 编程语言 中,finally 块可以不带 catch 块使用,并且它总是在 try 块之后执行。如果您想在不直接处理异常的情况下运行清理代码,这些功能非常有用。

C# 中不带 catch 块的 finally 块示例

让我们举一个例子,演示如何在 C# 中使用不带 catch 块的 finally 块。

示例

编译并运行

输出

Welcome to Tpointtech
The division of two numbers is: 40
Finally block has been executed successfully.
The program continues after the try finally.

说明

在此示例中,我们演示了不带 catch 块的 finally 块的使用。在 try 块内,我们打印一条消息并执行除法运算。之后,finally 块自动执行并打印确认消息。

带异常的 finally 块的执行

在 C# 编程中,带异常的 finally 块的执行意味着如果 try 块中发生错误,finally 块中的代码仍将运行。这确保了诸如清理或资源释放之类的任务始终完成。

使用带异常的 finally 块的 C# 示例

让我们举一个例子,来说明 C# 中使用带异常的 finally 块。

示例

编译并运行

输出

Error: Attempted to divide by zero.
Finally block executed.

说明

在此示例中,我们在 try 块中尝试将 10 除以 0。除以零的操作无效,因此会导致运行时错误。之后,程序会进入 catch 块。它会找到错误并显示错误消息。catch 块之后,finally 块会执行。

使用 finally 块进行资源清理的 C# 示例

让我们举一个例子,来说明如何使用 finally 块来清理资源。

示例

编译并运行

输出

File not found: Could not find file "/home/compiler/ test.txt "

说明

在此示例中,程序尝试打开或读取文件。如果找不到文件,catch 块将处理 FileNotFoundException 并显示错误消息。最后,finally 块执行。finally 块检查 r 对象是否不为 null,然后关闭它以释放系统资源。

C# finally 块中的重要注意事项

C# 中 finally 块的几个重要点如下:

  • 在 C# 中,不允许在同一程序块中使用多个 finally 块。
  • 这是一个可选块。
  • 单个 try 块可以包含多个 catch 块,但只允许一个 finally 块。

结论

总之,C# finally 块是异常处理中的一个重要因素,它通过处理运行时错误并维持程序的正常流程。finally 块是异常处理的关键特性。它确保无论是否发生异常,清理代码都将始终执行。这对于关闭文件、释放数据库或断开与数据库的连接等任务非常有用。

C# finally 块常见问题解答

1)C# 中的 finally 块是什么?

在 C# 中,finally 块是异常处理的关键特性。它确保无论是否发生异常,清理代码都将始终运行。这对于关闭文件、释放数据库或断开与数据库的连接等任务非常有用。finally 块写在 try 和 catch 块之后,位于末尾。

2)处理异常时 finally 块是必须的吗?

否,finally 块是异常处理中的一个可选块。它对于关闭文件、释放数据库或断开与数据库的连接等任务很有用。

3)finally 块何时执行?

finally 块在所有情况下都会运行。无论是否发生异常,它总是会运行。finally 块在 try 和 catch 块完成后执行。

4)C# 是否允许不带 catch 块的 finally 块?

是的,finally 块可以不使用 catch 块而使用。

5)当 finally 块中发生异常时如何处理?

如果在 finally 块中发生异常,它将抑制在 try 或 catch 块中抛出的任何异常。