10.finally块引用赋值

  1. 10.finally块引用赋值
    1. 10.1 题目
    2. 10.2 深入解析
    3. 10.3 答题示例
    4. 10.4 关键词联想

10.finally块引用赋值


10.1 题目

using System;

class Program
{
    static void Main(string[] args)
    {
        Test t = GetObj();
        Console.WriteLine($"第A处 i = {t.i}");
    }

    static Test GetObj()
    {
        Test t = new Test();
        try
        {
            return t;
        }
        finally
        {
            t.i = 11;
            Console.WriteLine($"第B处 i = {t.i}");
        }
    }
}

class Test
{
    public int i = 10;
}

请问A、B两处 i 的值为多少?


10.2 深入解析

A、B两处 i 的值都为 11。

考点:

  1. finally 块的执行顺序。
  2. 值类型和引用类型在赋值表现上的区别。

先打印B,因为finally先执行。finally中改了test对象的值,t是引用类型的,外部的t指向的地址和内部相同,所以改了内部外部也会打印11。


10.3 答题示例

finally 块在 return 使用t前执行,且返回的是对象引用,所以在 B 处先打印修改后的 11,随后在 A 处打印同样被修改过的 11。”


10.4 关键词联想

  • try-finally 先 finally
  • 引用类型返回引用
  • 对象共享修改
  • finally 修改生效


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

×

喜欢就点赞,疼爱就打赏