标签: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