码迷,mamicode.com
首页 > 其他好文 > 详细

try-catch-finally

时间:2014-10-08 13:08:45      阅读:129      评论:0      收藏:0      [点我收藏+]

标签: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();
        }
    }


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

bubuko.com,布布扣


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

bubuko.com,布布扣

try-catch-finally

标签:c#

原文地址:http://blog.csdn.net/mzbxzhdxmyb/article/details/39889723

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!