try-catch-finally

来源:互联网 发布:淘宝导航栏半透明代码 编辑:程序博客网 时间:2024/06/05 05:47

通过中间代码窥探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();        }    }


调用方法Test1,中间代码赋予本地变量的仅是一个引用,所以finally的操作是有影响的,其中间代码为:



调用方法Test2,try中return时,已经将返回值保存在中间代码的本地变量中,而不再是源码中变量test,所以finally的操作是无效的。其中间代码为:


2 1
原创粉丝点击