返回首页


让我们看一些代码:

int SomeMethod()

{

    int num = 1;



    try

    {

        num = 5;

        return num;

    }

    finally

    {

        num += 5;

    }

}

SomeMethod的返回值是什么?一些匿名的家伙问,在CodeProject上论坛的问题,它已回答。我写在这里,因为它是有趣的和微妙的。人们不应该感到惊讶,时人误解终于。因此,让我们猜测,10(I = 5,然后在finally块中增加5)。
这是不正确的答案;,而SomeMethod的回报5。同意,终于被称为SomeMethod的返回所有的情况下,但返回值是计算时,它是从SomeMethod的时间才能恢复正常或异常。精妙之处在于没有最后的方式执行,但在计算方法的返回值是。所以决定当一回是在try块中遇到的返回值(5)。最后只是要求清理;修改有num是本地SomeMethod的。因此,返回值10,它是没有用的,仓促finally块SomeMethod的回报。因为从最后返回是不允许的。 (我们会谈论它后来为什么从catch块返回是一种不好的做法,我们为什么不能从finally块返回。)
有一个引用类型上做这样的修改,他们就已经SomeMethod的外部可见,虽然返回值可能会有所不同。例如:{C}
因此,在上述情况下,返回值仍然是5,但Num._num已增加至10 SomeMethod的回报时。因此,反映了我们的代码是由编译器转换如下,其中的CS $ 1 $ 0000是我们的返回值。
private static int SomeMethod(Num num)

{

    int CS$1$0000;



    try

    {

        num._num = 5;

        CS$1$0000 = num._num;

    }

    finally

    {

        num._num += 5;

    }



    return CS$1$0000;

}

,我们已经澄清,最后,我们应该写的代码编译器转化自己,因为从try和catch块返回是不是一个好的做法。

回答

评论会员: 时间:2