本帖最后由 黑马杨凯 于 2012-9-14 17:07 编辑
你说的没错就是先执行try{}里面的"return i;"后执行finally{}里的语句,但是return i 之后并没有去Console.WriteLine(i),而是将返回 值i,保存起来了,然后去执行finally程序段,也就是说finally{}执行完后才会返回return语句保存 的值,vs可以进行反汇编,看一下就很清楚他的工作了
总结:
函数的return语句只出现在try-catch-finally 时,最终返回的值是return 语句中要返回的值(如果函数返回值为引用类型,return语句中变量当时指向的对象)。
return只是起到一个标记保存要返回的值(或者具体对象)的作用,而不会跳转到ret进行返回,所以会先执行完finally{}程序体,再返回
我修改了这个程序,添加了两个方法,说明下返回值为引用类型的时候的情况,如下:
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Calc());
Console.WriteLine("GetStr()返回信息{0}",GetStr()); //1111
Console.WriteLine("GetPerson()返回信息{0},{1}", GetPerson().Name, GetPerson().Age);//张三 23
Console.ReadKey();
}
static int Calc()
{
int i=0;
try
{
return i;
}
finally
{
Console.WriteLine("finally");
i++;
}
}
static string GetStr()
{
string str = "1111";
try
{
return str;
}
finally
{
str = "3333";
}
}
static Person GetPerson()
{
Person p1 = new Person("张三", 23);
try
{
return p1;
}
finally
{
Person p2 = new Person("李四", 25);
p1 = p2;
}
}
}
class Person
{
public Person()
{
}
public Person(string name, int age)
{
Name = name;
Age = age;
}
public string Name { get; set; }
public int Age { get; set; }
}
结果:
|
|