9.finally块执行顺序

  1. 9.finally块执行顺序
    1. 9.1 题目
    2. 9.2 深入解析
      1. 解析
    3. 9.3 答题示例
    4. 9.4 关键词联想

9.finally块执行顺序


9.1 题目

请说出以下代码:

static void Main(string[] args)
{
    int i = GetInt();
    Console.WriteLine($"第A处 i = {i}");
}

static int GetInt()
{
    int i = 10;
    try
    {
        return i;
    }
    finally
    {
        i = 11;
        Console.WriteLine($"第B处 i = {i}");
    }
}
  1. A处和B处谁先打印?
  2. A、B处打印的i值分别是多少?

9.2 深入解析

  1. B处先打印,A处后打印。
  2. A处 i = 10,B处 i = 11。

解析

try 执行完后仍会执行 finally。在 GetInt 中,return i 将返回值副本(10)准备好后,先执行 finally(B 处打印 11),再把返回值交给调用方,故 A 处为 10。值类型返回不受 finally 中对 i 的修改影响。


9.3 答题示例

“在执行 GetInt() 时,finally 块会在返回前执行,所以先在 B 处打印,输出 11,然后方法返回原始 i10,最后在 A 处打印 10。”


9.4 关键词联想

  • try-finally 执行顺序
  • return 前执行 finally
  • 值类型返回拷贝
  • finally 对返回值无影响


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏