标签:c#
通过中间代码窥探try-catch-finally本质:
class Program { static void Main(string[] args) { Program p = new Program(); Console.WriteLine(p.Test1()); //Console.WriteLine(p.Test2()); Console.Read(); } //结果为:3 private TestClass Test1() { TestClass tc = new TestClass(); try { tc.testVar = 2; return tc; } catch (Exception) { throw; } finally { tc.testVar = 3; } } //结果为:2 private int Test2() { int test = 1; try { test = 2; return test; } catch (Exception) { throw; } finally { test = 3; } } } class TestClass { public int testVar = 111; public override string ToString() { return testVar.ToString(); } }
调用方法Test2,try中return时,已经将返回值保存在中间代码的本地变量中,而不再是源码中变量test,所以finally的操作是无效的。其中间代码为:
标签:c#
原文地址:http://blog.csdn.net/mzbxzhdxmyb/article/details/39889723