下面是我的测试程序,测试结果为,在return之后执行final语句。
    public class Test
    {
         public String Test1() 
         { 
            String str = "aa "; 
            try 
            { 
                str = "bb";
                return str; 
            } 
            finally 
            { 
                str = "yy";
                Console.WriteLine(str);
            } 
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Test te = new Test();
            Console.WriteLine(te.Test1());
        }
    }如果在final语句模块在return之前执行,那么输出应该是"yy","yy",但实际输出结果为"yy","bb"。也就是return先将"bb"返回,然后再执行的final模块,显示"yy",最后执行main函数中的语句,显示"bb".

解决方案 »

  1.   

    finally里的变量str不能改变之前的return里str值除非你return语句在try catch finally后
      

  2.   

    会.
    return 前
    自己debug下
      

  3.   

    看书,看msdn,按F5。似乎都不应该发帖。
    会执行。
      

  4.   

    自己调试就知道过程了、、
    貌似无论执行try还是catch,都会执行finally,finally在return后会继续执行、、
    自己网上搜也是一大堆、、、
      

  5.   

    finally ()是必须执行的
    但是会在最后执行,打个必然你这个方法是string类型的,那等程序已经算出return的东西后,他将return的东西先在边上放一下(内存中暂时存一下),然后将finally放最后执行掉,这样整个方法已经完成,最终返回内存中暂存的东西
      

  6.   


      public class Test
      {
      public String Test1()  
      {  
      String str = "aa ";  
      try  
      {  
      str = "bb";
      return str;        // 0  此时执行了return 语句返回值已经确定了,但是该方法还没有执行完毕,
                    //    外界还不能访问返回值 或者说 还得不到返回值
      }  
      finally  
      {  //1
      str = "yy"; // 2
      Console.WriteLine(str);// 3
      }  //4
      }  //5 到此方法执行完毕,外界才可以去访问此方法的返回值  }还有返回类型如果是 引用类型的 返回的是一个指向特定内存地址的指针、而一个指针就是一个整数,但是如果是值类型的返回的是确切的数据。在当前例子中,返回值是string值类型,第零步操作已经确定了返回值,第二步执行的操作 str = "yy"; 对外是不可以见的,因此方法体外得到的实际数据为:BB,但是如果返回值类型是引用类型则方法体外得到实际数据为 "yy".自己的一点见解 不知对否、望大侠们莫笑。
      

  7.   

    Console.WriteLine(te.Test1());
    执行顺序:1、te.Test1() 2、Console.WriteLine
    te.Test1() 执行顺序,1、return 2、finally