3

C#.NET では、次の例を見てみましょう

[WebMethod]
public int TakeAction()
{
    try {
        //Call method A
        Return 1;
    } catch (Exception e) {
        //Call method B
        Return 0;
    } finally {
        //Call method C
    }
}

ここで、メソッド C が長時間実行されるプロセスであるとしましょう。

TakeAction を呼び出したクライアントは、メソッド C が呼び出される前、またはメソッド C が呼び出された後、または完了した後に戻り値を取得しますか?

4

2 に答える 2

10

戻り値が最初に評価され、次に finally ブロックが実行され、制御が (戻り値と共に) 呼び出し元に戻されます。戻り値の式が finally ブロックによって変更される場合、この順序付けは重要です。例えば:

Console.WriteLine(Foo()); // This prints 10

...

static int Foo()
{
    int x = 10;
    try
    {
        return x;
    }
    finally
    {
        // This executes, but doesn't change the return value
        x = 20;
        // This executes before 10 is written to the console
        // by the caller.
        Console.WriteLine("Before Foo returns");
    }
}
于 2013-10-23T21:29:05.830 に答える