zoukankan      html  css  js  c++  java
  • tryfinally

     class Program
        {
            static void Main(string[] args)
            {
                Program pr = new Program();
                testret ret = pr.dosome();
                Console.WriteLine(pr.doint());//值类型
                Console.WriteLine(ret.Name);//这里引用类型,方法内对于参数的修改也会带到方法外,这里可以证明就算return语句在try中,finally的代码也一定会执行。           
                Console.ReadKey();
            }
            private int doint()
            {
                int i = 0;
                try { i = 1; return i; }
                finally
                {
                    i = 2;
                    Console.WriteLine("finally int");
                }
                return i;
            }
            private testret dosome()
            {
                testret re = null;
                try
                {
                    re = new testret() { Name = "1" };
                    return re;
                }
                finally
                {
                    re.Name = "2"; re = null;
                    Console.WriteLine("finally ref");
                }
            }
        }
        class testret
        {
            public string Name { get; set; }
        }

    doint方法 用reflector查看il代码,如下:

    private int doint()
    {
        int CS$1$0000;
        int i = 0;
        try
        {
            i = 1;
            CS$1$0000 = i;
        }
        finally
        {
            Console.WriteLine("finally int" + 2);
        }
        return CS$1$0000;
    }
    
     
    
     

    dosome:

    private testret dosome()
    {
        testret re = null;
        testret CS$1$0000;
        try
        {
            testret <>g__initLocal0 = new testret {
                Name = "1"
            };
            re = <>g__initLocal0;
            CS$1$0000 = re;
        }
        finally
        {
            re.Name = "2";
            re = null;
            Console.WriteLine("finally ref");
        }
        return CS$1$0000;
    }
    
     
    
     

    不存在一种打破try-finally执行顺序的情况。除非应用程序在try中退出了。

  • 相关阅读:
    @atcoder
    @loj
    @atcoder
    @gym
    @codeforces
    @atcoder
    @bzoj
    @loj
    Kafka常用命令
    Kafka入门介绍
  • 原文地址:https://www.cnblogs.com/smailxiaobai/p/2951854.html
Copyright © 2011-2022 走看看