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。
考点:
finally
块的执行顺序。- 值类型和引用类型在赋值表现上的区别。
先打印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